开发者

JavaScript. Open new window with array of parameters

I have an asp.net mvc 3 application with some Action Method that handles GET requests and returns a page. Code looks like this:

[HttpGet]
public ActionResult Print(IEnumerable<string> arrayOfIds)
{
    .......................
    return View(someModel);     
}

Also there is JavaScript code, that calls this action:

window.open('@Url.Action("Print","Appointments")' + urlArray, "Print", "width=620,height=410,scrollbars=yes");

Where urlArray can be really big. How can I pass this data to the Action开发者_JAVA百科 Method without using URL string (maybe using content of HTTP Request)? I need it because URL is so big that browsers can't work with it.

UPD: May be my explanation wasn't really clear... I solved my problem. This is JavaScript code:

$.ajax({
        url: '@Url.Action("Print","Appointments")',
        type: "POST",
        data: { listOfIds : listOfIds },
        dataType: "text",
        traditional: true,
        success: function (data) {
            printWindow = window.open('', 'Print');
            printWindow.document.write(data);
        }
    });

Also I changed attribute of Action Method from HttpGet to HttpPost.


I don't think your question has much to do with JavaScript. The URL limitation is a feature of HTTP GET. You need to use HTTP POST, which you can't do with window.open().

However, you can do something like this...

window.open('about:blank', 'Print', 'width=620,height=410,scrollbars=yes');
document.myForm.target='Print';
document.myForm.urlArray=urlArray;
document.myForm.submit();

This opens a new window and posts an existing HTML form (method="post") to the new window. The example above assumes a hidden field with the name "urlArray", but you just need to supply whatever your Action Method expects.

You can tidy this up quite a bit if you have an existing form on the page already that you're using to capture the urlArray, you'll just need to target the form at a new window that is created by your form's onsubmit event handler.


You'll be better off posting a form to the current page (and thus transfer everything to the server side through POST) and then use RedirectToAction and pass your data at the server side.

It's a better way to do it. You can post the form using Javascript. So rather than window.open you'll be using form.submit()

EDIT:

Add target="_blank" to your form tag to open the results in a new window.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜