我有一个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。
答案 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"
添加到您的表单标记,以在新窗口中打开结果。