[英]Submit form after successful ajax call using jQuery in asp.net mvc 5
我在Asp.net MVC 5
項目中有一個具有“ Submit
按鈕的表單。 單擊“ Submit
按鈕后,我要執行以下操作:
在各個字段上使用jQuery
執行客戶端驗證(必填字段已填寫,電子郵件格式有效等)。 那部分工作正常。
進行Ajax
調用,該調用將通過從控制器調用一個操作並返回JSON
響應來執行一些服務器端驗證。 響應包含成功屬性和包含錯誤列表的錯誤屬性。
如果未發現錯誤,則Success屬性將返回true,並且Errors屬性將為null。 如果發現錯誤,則Success屬性返回false,並且Errors屬性包含相關錯誤的列表。
我從我的ApplicationForm控制器調用“ \\ ApplicationForm \\ Validate”操作,此部分工作正常。
Submit
按鈕的定義如下:
<div class="form-group">
<div>
<input type="button" id="btnApply" value="Apply" class="btn btn-primary" />
</div>
</div>
我的JavaScript
代碼定義如下:
$('#AppllicationForm').submit(function () {
if (!$(this).attr('validated')) {
if ($(this).valid()) {
$.ajax({
type: "POST",
data: $(this).serialize(),
url: "/ApplicationForm/ValidateForm",
dataType: 'json',
success: function (response) {
$('validationSummary').show();
if (response != null && response.success) {
console.log('No Validation errors detected');
$('#ApplicationForm').attr('validated', true);
$('#ApplicationForm').attr('action', '/ApplicationForm/Index')
.submit();
return true;
}
else if (response != null && !response.success) {
console.log('Validation errors detected');
var errors = response['errors'];
displayValidationErrors(errors);
window.scrollTo(0, 0);
}
return false;
},
error: function (response) {
$('validationSummary').hide();
console.log(response);
return false;
}
});
}
}
return false;
});
上面使用的是常規按鈕,但我也嘗試將其類型定義為Submit
但無濟於事。
我知道過去曾發布過類似的問題,但我找不到能真正幫助我解決問題的解決方案,因此請耐心等待,除非有實際問題,否則請勿將此問題標記為重復。實際解決我的問題。 非常感激!
可以從SO上的這篇文章中找到與我要實現的目標最接近的場景: 從ajax成功函數內部提交表單,該表單檢查值
在這個階段,我一直在嘗試許多不同的事情,但是沒有任何結果。 我或者沒有在ValidateForm
操作之后調用Index
操作,或者調用了一個或另一個操作,或者調用了唯一的Index
操作,或者我的模型被弄亂了,列表繼續。
我顯然不能正確執行此操作或缺少某些內容,但目前我仍然處於完全靜止的狀態。 我希望這是我想念的愚蠢的事情,希望有人能為我澄清這一點。
任何幫助將不勝感激。
試試看 :
$('#btnApply').click(function (e) {
alert('submit');
e.preventDefault();
var form = $('form'); // change selector your form
if (!form.attr('validated')) {
if (form.valid()) {
$.ajax({
type: "POST",
data: form.serialize(),
url: "/ApplicationForm/ValidateForm",
dataType: 'json',
success: function (response) {
console.log('response received.');
if (response != null && response.success) {
console.log('No validation errors detected.');
form.attr('validated', true);
form.attr('action', '/ApplicationForm/Index')
.submit();
} else if (response != null && !response.success) {
console.log('Validation errors detected.');
var errors = response['errors'];
displayValidationErrors(errors);
window.scrollTo(0, 0);
}
},
error: function (response) {
console.log(response);
$('validationSummary').hide();
}
});
}
}
});
請嘗試一下:
$('#btnApply').on('click', function (e) {
e.preventDefault();
var form = $( "#AppllicationForm" );
if (!form.attr('validated')) {
if (form.valid()) {
$.ajax({
type: "POST",
data: $(this).serialize(),
url: "/ApplicationForm/ValidateForm",
dataType: 'json',
success: function (response) {
$('validationSummary').show();
if (response != null && response.success) {
console.log('No Validation errors detected');
form.attr('validated', true);
form.submit();
return true;
}
else if (response != null && !response.success) {
console.log('Validation errors detected');
var errors = response['errors'];
displayValidationErrors(errors);
window.scrollTo(0, 0);
}
return false;
},
error: function (response) {
$('validationSummary').hide();
console.log(response);
return false;
}
});
}
}
return false;
});
您的表單操作屬性將為“ / ApplicationForm / Index”。 當您單擊按鈕時,您將進行驗證,如果一切正常,請提交表單。
請檢查以下解決方案:
$('#btnApply').on('click', function (event) {
if ($('form').valid()) {
event.preventDefault();
$.ajax({
type: "POST",
data: $(this).serialize(),
url: "/ApplicationForm/ValidateForm",
dataType: 'json',
success: function (response) {
$('validationSummary').show();
if (response != null && response.success) {
console.log('No Validation errors detected');
$('#ApplicationForm').attr('validated', true);
$('form').submit(); // Here form will be submmited to Index action.
return true;
}
else if (response != null && !response.success) {
console.log('Validation errors detected');
var errors = response['errors'];
displayValidationErrors(errors);
window.scrollTo(0, 0);
}
return false;
},
error: function (response) {
$('validationSummary').hide();
console.log(response);
return false;
}
});
});
並使用[HttpPost]
屬性裝飾ValidateForm方法。
我以為自己會分享自己的解決方案,因為我最終受聘於時間有限且無力在此花費更多時間的問題,因此聘請了一名自由職業者來看看它。
它是如何解決的? 他在第一個Ajax調用中添加了第二個。 煩人的(而且代價高昂!)部分是我確實嘗試過此操作,但是我有一條重要的漏行,即var formValidated = $('#AppllicationForm').serialize();
。
做出這些更改之后,我只需要重新調整我的一些邏輯,即應該顯示和/或隱藏哪個div,但請注意這是相當標准的東西。
這是按預期工作的最終代碼:
$('#AppllicationForm').submit(function () {
if ($(this).valid()) {
$.ajax({
type: "POST",
data: $(this).serialize(),
url: "/ApplicationForm/ValidateForm",
dataType: 'json',
success: function (response) {
if (response != null && response.success) {
var formValidated = $('#AppllicationForm').serialize();
$.ajax({
url: '/ApplicationForm/Index',
data: formValidated,
type: 'POST',
success: function (result) {
$('#mainDiv').hide();
$('#Congrats').show();
}
});
return true;
}
else if (response != null && !response.success) {
var errors = response['errors'];
displayValidationErrors(errors);
window.scrollTo(0, 0);
}
return false;
},
error: function (response) {
$('validationSummary').hide();
return false;
}
});
}
return false;
});
希望這對其他人有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.