Подтвердить что ты не робот

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

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

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

<% } %>

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

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

OnFailure Мне нужно показать сообщение othere.

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

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

Может ли anydboy помочь мне... как поймать это?

Спасибо

4b9b3361

Ответ 1

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>

Ответ 2

Я также искал один и тот же ответ, но выглядит как Ajax.BeginForm().. событие не хорошо документировано или нужно больше самостоятельных экспериментов, чтобы узнать, когда вызывается эти события onSuccess и onFailure. Но у меня была очень простая и простая альтернатива, чтобы не беспокоиться о настройке свойств onSuccess и onFailure AjaxOptions. Скорее, в вашем методе действий Controller просто вызовите метод onSuccess(), onFailure() javascript, отправив 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();" ); с сервера, потому что это не будет хорошим шаблоном.