asp.net-mvc - 使用将 Ajax 返回到 Ajax.BeginForm 的 onBegin 的函数

标签 asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-2

编辑:更清楚地说,我希望 onBegin 调用一个从 Ajax 调用返回 true 或 false 值的函数。该 false 值需要能够触发 onBegin 来中止表单提交,就像我从非 ajax 函数返回了 false 值一样。

如果存在某些条件,我需要向 Ajax.BeginForm 的 onBegin 返回 false 值。这样,如果存在某些数据库条件,我可以阻止表单提交。

但是,为了使用 Ajax Get 的结果,我需要制作函数来使用回调,这意味着我无法让 onBegin 使用的函数返回 ajax 值。那么如何将结果传递给onBegin呢?

基本上我有:

`Ajax.BeginForm(onBegin="checkIfMyConditionExists();"`}...

function checkIfMyConditionExists(){
   $.get(checkConditionURL, function(data){
     doSomething(data);
    });

如何将该数据(这将是我的真值或假值)获取到 onBegin 中?

最佳答案

如果不同步,您想要完成的事情就不会发生。您必须执行同步检查。否则,将调用检查,但在 ajax 调用有时间说“等我”之前,将提交表单和其他内容。

在对服务器的 ajax 调用中,您必须在 $.ajax 调用上设置 async: false。这将使其在运行下一段代码之前达到预期的某种结果。请记住,您不想执行 $.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!
        }
    });
}

实际上不需要比这更复杂。实现此操作时还需要记住一些事情...

Per the jQuery.ajax documentation :

As of jQuery 1.8, the use of async: false with jqXHR ($.Deferred) is deprecated; you must use the success/error/complete callback options instead of the corresponding methods of the jqXHR object such as jqXHR.done() or the deprecated jqXHR.success().

另一种实现此目的的方法是执行以下操作。

在表单上使用标准按钮。 (不是提交)

<button id="TriggerButton">Submit</button>

处理该按钮的点击。做你的检查。如果成功,请提交表单!

$(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");
            }
        });
    });
});

使用此方法,您可以删除 onBegin,它应该执行您需要执行的操作。 :)

关于asp.net-mvc - 使用将 Ajax 返回到 Ajax.BeginForm 的 onBegin 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17174684/

相关文章:

asp.net-mvc - ASP.NET MVC 复选框组

css - Orchard CMS 中的基本样式

c# - 继承的时候会包含require的https吗?

asp.net-mvc-3 - 在MVC Razor View 中使用If语句

asp.net-mvc-4 - 返回点击刷新页面 - MVC 4

javascript - 如何将 Javascript 数组传递给 View ? (MVC4)

c# - 在 vb.net Web 应用程序中使用 cshtml razor View

c# - 用于显示 List<model> 属性的 .NET MVC Html 助手

jquery - .load 正在执行 post 而不是 get

asp.net-mvc-3 - 编辑器模板/显示模板如何识别分配给它们的任何属性?