【问题标题】:Returning Redirect or PartialView from the same Action从同一个 Action 返回 Redirect 或 PartialView
【发布时间】:2010-11-15 13:15:31
【问题描述】:

我对 Ajax.BeginForm 有疑问。我有一个带有提交和更新部分视图的按钮的表单。

我想要完成的是,我可以在同一个操作中使用以下返回语句。

// button activates this
return PartialView("PartialViewName", data);

// submit activates this
return Redirect(model.Url);

现在的问题是重定向导致 Ajax.BeginForm 出现问题

<% using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { OnSuccess = "OnSuccess", UpdateTargetId = "Container", InsertionMode = InsertionMode.Replace }, new { id = "eventAjaxForm" })) { %>

我如何识别结果是 PartialView 还是我们正在重定向用户?

【问题讨论】:

    标签: asp.net-mvc-2 redirect partial-views


    【解决方案1】:

    通常,当您对控制器操作执行 AJAX 调用时,会遵循任何重定向,直到客户端收到 200 状态代码或错误。因此,您要重定向到的 URL 的 HTML 将放在 Container div 中。另一方面,在您的控制器操作中,您可以使用 Request.IsAjaxRequest() 测试调用是否是异步的并返回一个部分。

    【讨论】:

      【解决方案2】:

      如果您使用 Post Redirect Get 模式,则需要将 Request.IsAjaxRequest() 与 TempData 结合使用,即将 Request.IsAjaxRequest() 的结果保存在 TempData 中,这样,当您获得重定向请求,您可以检查 TempData 以查看它是否是原始 Ajax 请求的结果。

      这在 Steven Sandersons 关于 Pro ASP.NET MVC 2 的书中得到了很好的解释。

      【讨论】:

        【解决方案3】:

        谢谢大家的回答,但我能够用其他解决方案解决问题。

        我为提交和部分视图分别执行了操作。部分视图更新通过以下 jQuery 方法完成。

        $('.class').click(function () {
            var form = $("#eventForm").serialize();
            $.post("/Controller/Action",
            {
               form
            },
            function (result) {
               $('#container').html(result);
            }
            );
        });
        

        并使用“正常”提交按钮完成提交。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-10
          • 2021-05-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多