Как использовать методы Ajax.BeginForm OnSuccess и OnFailure?

Я использую этот Ajax.BeginForm

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

<% } %>

Что мне нужно написать в контроллере, чтобы поймать этот OnSucces и OnFailure.

Потому что OnSuccess мне нужно показать сообщение об успехе

При неудаче мне нужно показать другое сообщение.

В моем контроллере

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

Может ли кто-нибудь помочь мне.. как это поймать?

Спасибо

2 ответа

Решение

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>

Я также искал тот же ответ, но похоже, что события 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() на вашей странице, и это все.

РЕДАКТИРОВАТЬ:

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

Другие вопросы по тегам