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

时间:2011-04-01 19:14:59

标签: asp.net ajax asp.net-mvc-2 jquery

我使用这个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 个答案:

答案 0 :(得分: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


添加了控制器示例

最简单的方法就是我在这里得到的东西,但我建议使用某种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>

答案 1 :(得分:10)

我也在寻找相同的答案,但看起来像Ajax.BeginForm()..的事件没有很好的记录或需要更多的自我实验来找出这些onSuccess和onFailure事件何时被调用。但是我有一个非常简单直接的替代方案,不用去设置AjaxOptions的onSuccess和onFailure属性。相反,在Controller的action方法中,只需通过将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();”)并不是一个好主意;来自服务器,因为这不是一个好的模式。