Использование Javascript Bootbox с Ajax .BeginForm In ASP.NET - PullRequest
0 голосов
/ 30 января 2020

На странице просмотра:

@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», она отправит форму с определенными значениями, отличными от ранее.

Теперь проблема, с которой я сталкиваюсь, заключается в , когда пользователь нажимает кнопку SAVE, он переходит к функции 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 Начать форму согласно описанному выше сценарию?

1 Ответ

0 голосов
/ 31 января 2020

Я изменил поток и смог интегрировать Bootbox. То, что я сделал, я опустил функцию onBegin. Итак, моя страница просмотра выглядит следующим образом

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

Теперь я добавил функцию, которая вызывается событием onclick этой кнопки саммита форм. И встроенная функция validateAccountInformation и Bootbox в этой функции. Теперь важная часть: эта функция всегда возвращает 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;
});
...