Как использовать методы Ajax.BeginForm OnSuccess и OnFailure? - PullRequest
22 голосов
/ 01 апреля 2011

Я использую этот 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 помочь мне ... как это отловить?

Спасибо

Ответы [ 2 ]

27 голосов
/ 01 апреля 2011

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


Добавлен пример контроллера

Самый простой способ сделать это - это то, что я получил здесь, но я рекомендую изучить строго типизированные представления mvc, используя какой-то вид ViewModel, и, возможно, изучить использование 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>
10 голосов
/ 08 февраля 2012

Я также искал тот же ответ, но похоже, что события Ajax.BeginForm () .. недостаточно хорошо документированы или нуждаются в дополнительных самостоятельных экспериментах, чтобы узнать, когда вызываются эти события onSuccess и onFailure. Но я получил очень простую и прямую альтернативу, чтобы не беспокоиться о настройке свойств onSuccess и onFailure в AjaxOptions. Скорее, в методе действия вашего контроллера просто вызовите метод javascript onSuccess (), onFailure (), отправив ActionResult как JavaScriptResult. Например,

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.

{%>

<% } %>

Теперь вам нужно определить методы javascript OnSuccess () и OnFailure () на вашей странице, и это все.

EDIT:

Я думал, что, возможно, OnSuccess () будет вызываться по умолчанию, если с сервера не генерируется исключение. OnFailure () будет вызываться, если с сервера выдается какое-либо исключение. Я еще не тестировал эту концепцию. Если это так, то не рекомендуется отправлять JavaScript ("OnSuccess ();") и JavaScript ("OnFailure ();"); с сервера, потому что это не будет хорошим примером для подражания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...