代码之家  ›  专栏  ›  技术社区  ›  Tx3

从同一操作返回Redirect或PartialView

  •  0
  • Tx3  · 技术社区  · 15 年前

    我对Ajax.BeginForm有问题。我有一个带有submit和按钮的表单,可以更新部分视图。

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

    // 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还是重定向用户?

    3 回复  |  直到 15 年前
        1
  •  2
  •   Darin Dimitrov    15 年前

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

        2
  •  1
  •   awrigley    15 年前

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

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

        3
  •  0
  •   Tx3    15 年前

    谢谢你们的回答,但我能用其他方法解决这个问题。

    我对提交和部分视图分别采取了行动。部分视图更新使用以下jQuery方法完成。

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

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