Asp.net mvc (可选)在控制器操作中打开新窗口
在ASP.Net MVC 2应用程序中,我希望执行以下操作:在处理表单帖子的操作中,我希望:Asp.net mvc (可选)在控制器操作中打开新窗口,asp.net-mvc,asp.net-mvc-2,Asp.net Mvc,Asp.net Mvc 2,在ASP.Net MVC 2应用程序中,我希望执行以下操作:在处理表单帖子的操作中,我希望: 将用户重定向到当前浏览器窗口中的其他视图 打开显示其他信息的新窗口(其他视图) 可以轻松地在表单元素中设置target=“\u blank”属性并添加以下jQuery脚本: $(function () { $("form").submit(function () { window.location = "..."; }); }); 操作处理程序返回的视图将在表单发布
- 将用户重定向到当前浏览器窗口中的其他视图
- 打开显示其他信息的新窗口(其他视图)
target=“\u blank”
属性并添加以下jQuery脚本:
$(function () {
$("form").submit(function () {
window.location = "...";
});
});
操作处理程序返回的视图将在表单发布到的新窗口中呈现
但是,让我们把它弄得更复杂一点:
- 如果在执行操作时没有服务层错误,则执行上述操作
- 如果在执行操作时出现任何服务层错误,则不要打开新窗口,并且操作返回的视图必须显示在表单所在的同一窗口中
[HttpPost]
public ActionResult SomeAction(FormCollection form)
{
var serviceMethodParams = ... // convertion from the form data somehow
MemoryStream pdfDocument = null;
if (!serviceLayer.DoSomething(serviceMethodParams, out pdfDocument))
{
// Something went wrong, do not redirect, do not open new window
// Return the same view where error should be displayed
return View(...);
}
// The service method run ok, this must be shown in a new window and the origal window must be redirected somewhere else
return File(pdfDocument.ToArray(), "application/pdf");
}
请注意,当服务返回
true
时,原始解决方案可以正常工作,但如果服务返回false
则显示错误的视图将显示在新窗口中,原始窗口将重定向到其他位置。在这种情况下,更好的选择是只返回一个特定于该文档的URL供用户指向,ajax调用成功后,将获取从action方法返回的URL,然后打开一个指向该URL的新窗口。在出现错误时,您可以显示错误或类似的内容—基本上,数据被折叠在Json返回值中
除了ajax调用之外,我最能接受的模式是重新呈现视图,然后附加一些启动javascript以打开指向该特定URL的新窗口