2011-04-01 269 views
22

我用這個Ajax.BeginForm如何使用Ajax.BeginForm OnSuccess和OnFailure方法?

<% using(Ajax.BeginForm("Create","Mandate", 
         new AjaxOptions() { 
          OnSuccess = "GoToMandates", 
          OnFailure = "ShowPopUpError" 
         })) {%> 

<% } %> 

什麼我需要在CONTROLER趕上這個OnSucces和onFailure處寫。

因爲我的onSuccess需要證明成功的消息

onFailure處我需要顯示othere消息。

在我的控制器

Public ActionResult GetSomething(FromCollection collection) 
{ 
    if(exists == null) 
    { 
      //OnSuccess 
    } 
    else 
    { 
     //OnFailure 
    } 
} 

能anydboy幫我..怎麼抓呢?

感謝

回答

27

的的onSuccess和onFailure處看起來像他們期待的JavaScript回調函數。

<script type="text/javascript"> 
    function handleError(ajaxContext) { 
    var response = ajaxContext.get_response(); 
    var statusCode = response.get_statusCode(); 
    alert("Sorry, the request failed with status code " + statusCode); 
    } 
</script> 

<%= Ajax.ActionLink("Click me", "MyAction", 
new AjaxOptions { UpdateTargetId = "myElement", OnFailure = "handleError"}) %> 

來自實例Pro ASP.NET Framework頁425

ASP.NET AjaxOptions Class


新增控制器示例

做到這將是我在這裏得到了,但simpliest方式,我建議考慮使用某種ViewModel強類型化mvc視圖,並且可能會考慮使用jQuery作爲您的ajax。說這應該有希望爲你工作。

if (exists) 
{ 
    ViewData["msg"] = "Some Success Message"; 
} 
else 
{ 
    ViewData["msg"] = "Some Error Message"; 
} 

return View(); 

在你看來

<div id="myResults" style="border: 2px dotted red; padding: .5em;"> 
    <%: ViewData["msg"]%> 
</div> 
+0

感謝NIcky,我需要在控制器中寫什麼?謝謝 – kumar 2011-04-01 19:50:28

+1

噢,我明白你想在那裏做什麼。我相信AjaxOptions OnSuccess和OnError僅與XHR請求相關,並且與Controller無關。我會快速思考,然後我會更新我的答案。 – 2011-04-01 19:58:15

+0

是否可以調用jquery函數呢? – hidden 2011-12-12 17:55:15

10

我也尋找相同的答案,但看起來像Ajax.BeginForm()..的事件的都有詳細的記載或需要更多的自我實驗發現當這些onSuccess和onFailure事件被調用時。但是我得到了一個非常簡單直接的選擇,不用擔心設置AjaxOptions的Success和onFailure屬性。相反,在您的Controller的操作方法中,只需通過將ActionResult作爲JavaScriptResult發送,即可調用onSuccess(),onFailure()javascript方法。例如,

Public ActionResult Create(FromCollection collection) 
{ 
    if(exists == null) 
    { 
      //OnSuccess 
      return JavaScript("OnSuccess();"); 
    } 
    else 
    { 
     //OnFailure 
     return JavaScript("OnFailure();"); 
    } 
} 

而且Ajax.BeginForm標記看起來應該

<% 
    using(Ajax.BeginForm("Create","Mandate", new AjaxOptions())) // see, no OnSuccess and OnFailure here. 

{%> 

<% } %> 

現在,您需要定義的onSuccess()和onFailure處()JavaScript方法在您的網頁和多數民衆贊成它。

編輯:

我在想,也許,的onSuccess()將被默認,如果沒有異常,從服務器中拋出的調用。如果從服務器拋出任何異常,OnFailure()將被調用。我還沒有測試這個概念。如果那是真的,那麼練習發送JavaScript(「OnSuccess();」)和JavaScript(「OnFailure();」)不是一個好主意。從服務器,因爲這不會是一個很好的模式。

相關問題