2010-11-15 67 views
0

我有Ajax.BeginForm的问题。我有一个表单提交和更新部分视图的按钮。从同一动作返回重定向或部分视图

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

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

回答

2

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

1

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

这史蒂芬Sandersons本书很好地解释在临ASP.NET MVC 2

0

谢谢你们对你的答案,但我还是能够解决与其他解决方案的问题。

我对提交和局部视图做了单独的操作。部分视图更新使用以下jQuery方法完成。

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

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

相关问题