从同一个Action返回重定向或部分视图

时间:2010-11-15 13:15:31

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

我遇到Ajax.BeginForm问题。我有一个表单,提交和按钮更新部分视图。

我想要完成的是我可以在同一个Action中使用以下return语句。

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

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

现在问题是Redirect导致Ajax.BeginForm

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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

Steven Sandersons关于Pro ASP.NET MVC 2的书中对此进行了解释。

答案 2 :(得分:0)

谢谢你们的答案,但我能用其他解决方案解决问题。

我为提交和部分视图单独执行了操作。使用以下jQuery方法完成部分视图更新。

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

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