2010-11-15 50 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); 
    } 
    ); 
}); 

並提交完成與「正常」提交按鈕。

相關問題