[英]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.