Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在服务器validaiton出现ASP.NET MVC核心故障后,modal中的js停止工作_Javascript_Jquery_Validation_Entity Framework 6_Asp.net Core Mvc - Fatal编程技术网

Javascript 在服务器validaiton出现ASP.NET MVC核心故障后,modal中的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- $(

我正在使用.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>