在 ASP.NET 中将 Javascript Bootbox 与 Ajax.BeginForm 一起使用

Using Javascript Bootbox with Ajax.BeginForm In ASP.NET

在查看页面中:

@using (Ajax.BeginForm("UpdateAccount", "AccountInfo", new AjaxOptions {
    HttpMethod = "POST",
    AllowCache = false,
    OnSuccess = "accountUpdateRequestSuccess",
    OnFailure = "formSubmissionFailed",
    OnBegin = "validateAccountInformation"
}))

validateAccountInformation 函数说明如下:

function validateAccountInformation() {
if (error.length > 0) {
    showErrorNotification(errorListHtml);
    return false;
}
else {
    if ( Some Conditions ) {
        bootbox.confirm({
            title: "Confirm",
            size: "medium",
            message: "Some Message",
            callback: function (result) {
                if (result) {
                    Some Code
                }
                else {
                    Some Code
                }
            }
        });
    }        
}

单击“保存”按钮时,首先调用 validateAccountInformation 函数。如果没有错误,它将引发一个 Bootbox。如果单击 Bootbox OK 按钮,它将提交具有特定值的表单,或者如果单击 Bootbox CANCEL 按钮,它将提交具有与以前不同的特定值的表单。

现在,我面临的问题是,当用户单击“保存”按钮时,它会转到 validateAccountInformation 函数。如果没有错误,它会调用 Bootbox.Confirm。我期望在 Bootbox 中单击某些 OK/CANCEL 按钮之前,将保留表单提交。但它不会等待 Bootbox。意味着永远不会调用 Bootbox 回调函数。这可能与 AJAX 异步有关。

我使用了javascript确认方法。而且这个方法确实持有表单提交。

function validateAccountInformation() {
    if (error.length > 0) {
        showErrorNotification(errorListHtml);
        return false;
    }
    else {
        if ( Some Conditions ) {
            if (confirm("check")) {
                some code
            }
        }
    }
}

有什么方法可以让我按照上述方案将 Bootbox 确认框与 Ajax Begin Form 一起使用?

我改变了流程并且能够集成 Bootbox。 我所做的是,我省略了 onBegin 函数。所以我的视图页面看起来像这样

@using (Ajax.BeginForm("UpdateAccount", "AccountInfo", new AjaxOptions {
     HttpMethod = "POST",
     AllowCache = false,
     OnSuccess = "accountUpdateRequestSuccess",
     OnFailure = "formSubmissionFailed",
 }))

现在我添加了一个函数,该函数由此表单峰会按钮的 onclick 事件触发。并在该函数内集成了validateAccountInformation函数和Bootbox。现在重要的是,这个函数总是 returns false。通过返回 false,我设法保留了表单提交。现在 onClick 事件函数看起来像

$(document).on('click', '#btn-edit-account-save', function () {
     var submit = validateAccountInformation(); 
     some code   
     if (submit == true) {
         if (some condition) 
         {
             $('Form').submit();
         }
         else 
         {
             bootbox.confirm(
             {
                 title: "Confirm",
                 size: "medium",
                 message: "Some Message",
                 callback: function (result) 
                 {
                     if (result) 
                     {
                         $('Form').submit();
                     }
                     else 
                     {
                         some code
                     }
                 }
             });
         } 
     }
     return false;
});