Javascript 在服务器validaiton出现ASP.NET MVC核心故障后,modal中的js停止工作
我正在使用.NETCore2.0创建一个企业web应用程序,当提交的表单验证失败时,我会得到一些意想不到的结果。我正在为单击事件创建一个模式,该事件由驻留在局部视图中的表单填充。部分视图引用了一个外部js文件,只要表单处于未提交状态或有效状态,一切都可以正常工作 然而,当我通过上述表单提交无效数据时,情况变得很奇怪。服务器端验证完成了它的工作,错误消息会按预期返回表单。问题是,在呈现错误消息之后,表单中使用的其他js都不起作用 现在是代码。下面是创建模式并通过site.js提交表单的js-Javascript 在服务器validaiton出现ASP.NET MVC核心故障后,modal中的js停止工作,javascript,jquery,validation,entity-framework-6,asp.net-core-mvc,Javascript,Jquery,Validation,Entity Framework 6,Asp.net Core Mvc,我正在使用.NETCore2.0创建一个企业web应用程序,当提交的表单验证失败时,我会得到一些意想不到的结果。我正在为单击事件创建一个模式,该事件由驻留在局部视图中的表单填充。部分视图引用了一个外部js文件,只要表单处于未提交状态或有效状态,一切都可以正常工作 然而,当我通过上述表单提交无效数据时,情况变得很奇怪。服务器端验证完成了它的工作,错误消息会按预期返回表单。问题是,在呈现错误消息之后,表单中使用的其他js都不起作用 现在是代码。下面是创建模式并通过site.js提交表单的js- $(
$(function () {
// stores the current URL in a variable to use for data update on modal.
var placeholderElement = $('#modal-placeholder');
$('.trigger-ajax-modal[data-toggle="ajax-modal"]').click(function (event) {
var url = $(this).data('url');
$.get(url).done(function (data) {
placeholderElement.html(data);
placeholderElement.find('.modal').modal('show');
});
});
placeholderElement.on('click', '[data-save="modal"]', function (event) {
event.preventDefault();
var form = $(this).parents('.modal').find('form');
var actionUrl = form.attr('action');
var dataToSend = form.serialize();
$.post(actionUrl, dataToSend).done(function (data) {
var newBody = $('.modal-body', data);
placeholderElement.find('.modal-body').replaceWith(newBody);
var isValid = newBody.length;
if (isValid < 1) {
placeholderElement.find('.modal').modal('hide');
location.reload();
}
});
});
$(函数(){
//将当前URL存储在一个变量中,以用于模式上的数据更新。
变量占位符元素=$(“#模式占位符”);
$('.trigger ajax modal[data toggle=“ajax modal”]')。单击(函数(事件){
var url=$(this.data('url');
$.get(url).done(函数(数据){
占位符元素.html(数据);
占位符元素。查找('.modal')。模态('show');
});
});
占位符元素。在('click','data save=“modal”]'上,函数(事件){
event.preventDefault();
var form=$(this).parents('.modal').find('form');
var actionUrl=form.attr('action');
var dataToSend=form.serialize();
$.post(actionUrl,dataToSend).done(函数(数据){
var newBody=$(“.modal body”,数据);
占位符元素。查找('.modal body')。替换为(newBody);
var isValid=newBody.length;
if(isValid<1){
占位符元素。查找('.modal')。模态('hide');
location.reload();
}
});
});
现在,对于显示验证错误后停止的js-
$(document).ready(function () { // <--works before form submission
//various code to do things like dynamically populate input via AJAX call based on a drop down list
// and doing simple arithmetic to avoid user error
}); // <-- not so much after form is returned as invalid
$(document).ready(函数(){/),如我的注释中所述。
问题是,由于没有正确替换脚本,脚本正在加倍
解决方案是替换PartialView
方法的根元素。
我建议尝试placeholder-element.html(newBody)
在你的post方法中。你能在site.js
中显示你的submit方法吗?$.post方法是调用modal的函数的一部分…我将把两者分开,看看是否会产生不同的结果。哦,我没有意识到。在$.post
的done函数中,你用PartialView的结果替换了modal主体(“_Create”,vm)。您能在这里查找服务器返回的内容吗?。模态体
需要是此响应的根元素。为了澄清……您询问的响应是“data”的内容,而不是下一行的jQuery选择器……var newBody=$(“.modal body”,data);对吗?我已经隔离了这些数据,它是部分视图的整个HTML。虽然类模态体在该响应中,但它不在顶部附近。大约有5个div。这可能是问题所在,因为脚本可能也在该HTML中,并导致问题。我建议尝试placeholder element.HTML(newBody);
在您的post方法中。
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(MileageTrackerEditVM vm)
{
try
{
if (ModelState.IsValid)
{
var dto = _mapper.Map<MileageTrackerDto>(vm);
await _mileageTrackerSvc.UpdateMileageTracker(dto);
return RedirectToAction(nameof(Index));
}
return PartialView("_Create", vm);
}
catch (Exception ex)
{
Console.WriteLine("An general error has occured while trying to create a mileage entry: {0}", ex.Message);
throw;
}
}
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
<script type="text/javascript" src="~/scripts/MileageTrackers.js"></script>