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

Posted

技术标签:

【中文标题】如何使用 Ajax.BeginForm OnSuccess 和 OnFailure 方法?【英文标题】:How to Use Ajax.BeginForm OnSuccess and OnFailure Methods? 【发布时间】:2011-07-27 22:20:54 【问题描述】:

我使用这个 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 可以帮帮我吗.. 如何解决这个问题?

谢谢

【问题讨论】:

【参考方案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 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>

【讨论】:

谢谢 NIcky,我需要在控制器中写些什么?谢谢 哦,对了,我明白了你想在那里做什么。我相信 AjaxOptions OnSuccess 和 OnError 仅与 XHR 请求有关,与 Controller 无关。我会快速思考一下,然后我会更新我的答案。 是否可以改为调用jquery函数? @jvelez 到底要做什么? ajax 请求?如果您想要类似的东西,请查看 jquery 表单插件,否则 jquery ajax 也可以工作。【参考方案2】:

我也在寻找相同的答案,但看起来 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();"); 将不是一个好主意。来自服务器,因为这不是一个好的模式。

【讨论】:

以上是关于如何使用 Ajax.BeginForm OnSuccess 和 OnFailure 方法?的主要内容,如果未能解决你的问题,请参考以下文章

MVC 4 Ajax.BeginForm 绑定网格

Ajax.BeginForm 验证模型

ajax.beginform - OnFailure 不返回部分视图

使用 JavaScript 提交 Ajax.BeginForm()

取代Ajax.BeginForm的ajax使用方法

通过 ActionLink 提交 Ajax.BeginForm