JavaScript的。打开包含参数数组的新窗口

时间:2011-04-21 08:26:59

标签: javascript asp.net-mvc

我有一个asp.net mvc 3应用程序,其中包含一些处理GET请求并返回页面的Action Method。代码如下所示:

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

还有JavaScript代码,可以调用此操作:

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

urlArray真的很棒。如何在不使用URL字符串的情况下将此数据传递给Action方法(可能使用HTTP Request的内容)?我需要它,因为URL非常大,以至于浏览器无法使用它。

UPD:可能是我的解释不太清楚......我解决了我的问题。这是JavaScript代码:

$.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);
        }
    });

我还将Action Method的属性从HttpGet更改为HttpPost。

2 个答案:

答案 0 :(得分:2)

我不认为您的问题与JavaScript有很大关系。 URL限制是HTTP GET的一项功能。您需要使用HTTP POST,而window.open()无法使用。

然而,你可以这样做......

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

这会打开一个新窗口,并将现有的HTML表单(method =“post”)发布到新窗口。上面的示例假设一个名为“urlArray”的隐藏字段,但您只需要提供Action Method期望的任何内容。

如果您已经在用于捕获urlArray的页面上已有表单,那么您可以整理一下这些内容,您只需要在表单创建的新窗口中定位表单即可onsubmit事件处理程序。

答案 1 :(得分:1)

最好将表单发布到当前页面(然后通过POST将所有内容传输到服务器端),然后使用RedirectToAction并在服务器端传递数据。

这是一种更好的方法。您可以使用Javascript发布表单。因此,而不是window.open您将使用form.submit()

修改

target="_blank"添加到您的表单标记,以在新窗口中打开结果。