如何使用 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 方法?的主要内容,如果未能解决你的问题,请参考以下文章
ajax.beginform - OnFailure 不返回部分视图