使用一个函数将Ajax返回给Ajax.BeginForm的onBegin

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?

tec*_*osh 5

如果没有同步,你想要完成的事情就不会发生.您不得不执行同步检查.否则,将调用该支票,但在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.ajax文档:

从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,它应该执行您需要它执行的操作.:)