Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc (可选)在控制器操作中打开新窗口_Asp.net Mvc_Asp.net Mvc 2 - Fatal编程技术网

Asp.net mvc (可选)在控制器操作中打开新窗口

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 = "..."; }); }); 操作处理程序返回的视图将在表单发布

在ASP.Net MVC 2应用程序中,我希望执行以下操作:在处理表单帖子的操作中,我希望:

  • 将用户重定向到当前浏览器窗口中的其他视图
  • 打开显示其他信息的新窗口(其他视图)
可以轻松地在表单元素中设置
target=“\u 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
则显示错误的视图将显示在新窗口中,原始窗口将重定向到其他位置。

在这种情况下,更好的选择是只返回一个特定于该文档的URL供用户指向,ajax调用成功后,将获取从action方法返回的URL,然后打开一个指向该URL的新窗口。在出现错误时,您可以显示错误或类似的内容—基本上,数据被折叠在Json返回值中

除了ajax调用之外,我最能接受的模式是重新呈现视图,然后附加一些启动javascript以打开指向该特定URL的新窗口