在ASP.Net MVC 2应用程序中,我想执行以下操作:在处理表单帖子的操作中,我想:
可以轻松地在表单元素中设置target="_blank"
属性并添加以下jQuery脚本:
$(function () {
$("form").submit(function () {
window.location = "...";
});
});
操作处理程序返回的视图将在窗体发布到的新窗口中呈现。
但是,让它变得有点棘手:
例如:想象一下,服务层生成一个pdfDocument,以便向用户显示一切正常,并且pdf必须在新窗口中显示。
[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
,则显示错误的视图将显示在新窗口中,并且原始窗口将重定向到其他位置。
答案 0 :(得分:1)
在这种情况下,更好的选择是简单地返回特定于该文档的URL供用户指向,并且ajax调用在成功时获取从操作方法返回的URL,然后打开一个新的窗口本身指向该URL。出错时,您可以显示错误或其他一些错误 - 基本上,这些数据是以Json返回值折叠的。
在ajax调用之外,对我来说最可接受的模式是让视图重新渲染,然后附加一些启动javascript以打开指向该特定URL的新窗口。