Y H*_*ber 2 asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 asp.net-mvc-4
编辑:更清楚的是,我希望onBegin调用一个从Ajax调用返回true或false值的函数.该错误值需要能够触发onBegin中止表单提交,就像我从非ajax函数返回false值一样.
如果存在某些条件,我需要将值false返回给Ajax.BeginForm的onBegin.这样,如果存在某些数据库条件,我可以阻止表单提交.
但是,为了使用Ajax Get的结果,我需要设计函数来使用回调,这意味着我不能让onBegin使用的函数返回ajax值.那么如何将结果传递给onBegin?
基本上我有:
`Ajax.BeginForm(onBegin="checkIfMyConditionExists();"`}...
function checkIfMyConditionExists(){
$.get(checkConditionURL, function(data){
doSomething(data);
});
Run Code Online (Sandbox Code Playgroud)
如何将这些数据(这可能是我的真值或假值)转换为onBegin?
如果没有同步,你想要完成的事情就不会发生.您将不得不执行同步检查.否则,将调用该支票,但在ajax电话有时间说"等我"之前,将提交表格和其他内容.
在你的Ajax调用服务器必须设置async: false一个$.ajax呼叫.这将使它在运行下一段代码之前到达预期某种结果的位置.请记住,您不想这样做,$.get因为没有选项可以将其关闭.
如果你"不想让UI挂起" ......放一些加载图标或文字.无论如何,对于"ajax"来说这是一个很好的做法......
这是您可以使用的代码:)
function checkIfMyConditionExists () {
$.ajax({
url: checkConditionURL,
async: false,
success: function (data) {
if (!data.success) {
return false;
}
// put your code to run something here!
}
});
}
Run Code Online (Sandbox Code Playgroud)
它确实不需要比这更复杂.在实现这个时还要记住一些事情......
从jQuery 1.8开始,不推荐使用async:false和jqXHR($ .Deferred); 您必须使用success/error/complete回调选项而不是jqXHR对象的相应方法,例如jqXHR.done()或不推荐使用的jqXHR.success().
实现此目的的另一种方法是执行以下操作.
使用表单上的标准按钮.(不是提交)
<button id="TriggerButton">Submit</button>
Run Code Online (Sandbox Code Playgroud)
处理该按钮的单击.做你的检查.如果成功,请提交表格!
$(function () {
$("#TriggerButton").click(function (e) {
e.preventDefault();
$.ajax({
url: checkConditionURL,
success: function (data) {
if (!data.success) {
// ruh roh!
return false;
}
// submit le form!
$("#MyForm").trigger("submit");
}
});
});
});
Run Code Online (Sandbox Code Playgroud)
使用此方法,您可以删除onBegin,它应该执行您需要它执行的操作.:)