web-dev-qa-db-ja.com

Ajax.BeginForm OnSuccessおよびOnFailureメソッドを使用する方法

私はこのAjax.BeginFormを使用しています

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

<% } %>

このOnSuccesとOnFailureをキャッチするには、コントローラーに何を書く必要がありますか。

OnSuccessに成功メッセージを表示する必要があるため

OnFailure他のメッセージを表示する必要があります。

私のコントローラーで

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

Anydboyは私を助けることができます..これをキャッチする方法は?

ありがとう

22
kumar

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クラス


追加されたコントローラーの例

これを行う最も簡単な方法はここにあるものですが、何らかの種類のViewModelを使用して強く型付けされたmvcビューを調べ、おそらくあなたのajaxにjQueryを使用することをお勧めします。とはいえ、これはうまくいけばうまくいくはずです。

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>
27
Nicky Waites

私も同じ答えを探していましたが、Ajax.BeginForm()..のイベントは十分に文書化されていないか、これらのonSuccessイベントとonFailureイベントがいつ呼び出されるかを調べるための自己実験が必要です。しかし、AjaxOptionsのonSuccessプロパティとonFailureプロパティを設定することに煩わされないための非常に簡単で簡単な代替手段がありました。むしろ、コントローラーのアクションメソッドで、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();");の送信を練習することはお勧めできません。サーバーから。これは従うべき良いパターンではないからです。

11
Emran Hussain