【问题标题】:How to Use Ajax.BeginForm OnSuccess and OnFailure Methods?如何使用 Ajax.BeginForm OnSuccess 和 OnFailure 方法?
【发布时间】: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 可以帮帮我吗.. 如何解决这个问题?

谢谢

【问题讨论】:

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


    【解决方案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();"); 将不是一个好主意。来自服务器,因为这不是一个好的模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-21
      • 2018-08-03
      • 1970-01-01
      • 2015-11-09
      • 2011-09-14
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      相关资源
      最近更新 更多