C# 重新初始化非结构化jquery验证
我已经通过ajax重新绑定了viewmodel,因为我不喜欢默认的功能模式弹出窗口,因为我忘记了我要遵循的教程链接,下面是我的一些代码 数据表代码C# 重新初始化非结构化jquery验证,c#,jquery,asp.net-mvc-5,unobtrusive-javascript,unobtrusive-ajax,C#,Jquery,Asp.net Mvc 5,Unobtrusive Javascript,Unobtrusive Ajax,我已经通过ajax重新绑定了viewmodel,因为我不喜欢默认的功能模式弹出窗口,因为我忘记了我要遵循的教程链接,下面是我的一些代码 数据表代码 $(document).ready(function () { $("#btnNew").text("New"); $('#grid-src').hide(); $('#btnToggleSrc').click(function () { $('#grid-src').toggle(); });
$(document).ready(function () {
$("#btnNew").text("New");
$('#grid-src').hide();
$('#btnToggleSrc').click(function () {
$('#grid-src').toggle();
});
$("#btnNew").on("click", function (e) {
$.ajax({
type: "POST",
url: '@Url.Action("Edit", "Roles", new { area = "PM" })',
dataType: 'json',
data: { id: 0 },
success: function (obj) {
switch (obj.ResponseMsg.MsgType) {
case 'SUCCESS':
var roles = obj.Data;
$.ajax({
type: "POST",
url: '@Url.Action("LoadEdit", "Roles", new { area = "PM" })',
dataType: 'json',
data: { role: roles },
sucecss: function (obj) {
},
complete: function () {
$('#modal-title').text('New Role');
$('#edit-form').modal('show');
}
});
break;
case 'WARNING':
toastr.warning(obj.ResponseMsg.MsgDesc);
break;
case 'ERROR':
toastr.error(obj.ResponseMsg.MsgDesc);
break;
}
}
});
});
$('#table-container').on('click', 'a.btn-edit', function (e) {
var param = parseInt(this.id.replace('edit-', ''));
$.post('@Url.Action("Edit", "Roles", new { area = "PM" })', { id: param })
.done(function (obj) {
switch (obj.ResponseMsg.MsgType) {
case 'SUCCESS':
var role = obj.Data;
$.post('@Url.Action("LoadEdit", "Roles", new { area = "PM" })', { role: role })
.done(function (obj) {
debugger;
$('#edit-form-partial').html(obj);
//$.validator = $('#frmSubmit').validate(
//{
// ignore: ":hidden"
//});
$('#modal-title').text('Edit Role');
$('#edit-form').modal('show');
});
break;
case 'WARNING':
toastr.warning(obj.ResponseMsg.MsgDesc);
break;
case 'ERROR':
toastr.error(obj.ResponseMsg.MsgDesc);
break;
}
});
});
var url = "@Url.Action("Read", "Roles", new { area = "PM" })"
var oTable = $('#table').dataTable({
"processing": false,
"serverSide": true,
"orderMulti": false,
"sScrollY": ($(window).height() - 300),
"sScrollYInner": "100%",
"sheight": "425px",
"pageLength": 10,
"dom": '<"top"i>rt<"bottom"lp><"clear">',
"ajax": {
"url": url,
"type": "POST",
"datatype": "json",
"error": function (xhr, ajaxOptions, thrownError) {
alert(thrownError);
}
},
"columns": [
{ "data": "ID", "name": "ID", "autowidth": true, "visible": false },
{ "data": "RoleName", "name": "RoleName", "autowidth": true },
{ "data": "CreatedBy", "name": "CreatedBy", "autowidth": true, "sorting": false },
{
"data": "CreatedTime", "name": "CreatedTime", "autowidth": true, "render": function (jsonDate) {
return generateDate(jsonDate);
},
"sorting": false
},
{ "data": "ModifiedBy", "name": "ModifiedBy", "autowidth": true, "sorting": false },
{
"data": "ModifiedTime", "name": "ModifiedTime", "autowidth": true, "render": function (jsonDate) {
return generateDate(jsonDate);
},
"sorting": false
},
{
"data": "ID", "width": "50px", "render": function (data) {
return '<a class="btn-edit" href="javascript:void(0)" id="edit-' + data + '" style="cursor: pointer">Edit</a>';
},
"sorting": false
},
{
"data": "ID", "width": "50px", "render": function (data) {
return '<a class="btn-delete" href="javascript:void(0) id="delete-' + data + '" style="cursor: pointer">Delete</a>';
},
"sorting": false
}
]
});
问题是,在重新绑定partialview后,干扰性验证总是正确的,重新绑定后所需的验证不起作用
编辑:我已经试过了。验证和。有效
它总是返回true,即使文本框为空我得到了一个加载json数据并用它填充多个表单的项目 第一条路 我通过做三件事使它成功 1-在填充如下字段之前重置表单:
$("#MyFormId").trigger("reset");
$("#MyFieldName").trigger("change");
$("#MyFieldName").val(myValueGoesHere).trigger("change");
.done(function (obj) {
debugger;
$('#edit-form-partial').html(obj);
rebindvalidators();//rebind your validators after loading the html.
//$.validator = $('#frmSubmit').validate(
//{
// ignore: ":hidden"
//});
$('#modal-title').text('Edit Role');
$('#edit-form').modal('show');
});
2-使用javascript填充字段
$("#MyFieldName").val(myValueGoesHere);
3-触发所有文本字段上的更改事件,如下所示:
$("#MyFormId").trigger("reset");
$("#MyFieldName").trigger("change");
$("#MyFieldName").val(myValueGoesHere).trigger("change");
.done(function (obj) {
debugger;
$('#edit-form-partial').html(obj);
rebindvalidators();//rebind your validators after loading the html.
//$.validator = $('#frmSubmit').validate(
//{
// ignore: ":hidden"
//});
$('#modal-title').text('Edit Role');
$('#edit-form').modal('show');
});
请注意,2和3可以在一行中实现,如下所示:
$("#MyFormId").trigger("reset");
$("#MyFieldName").trigger("change");
$("#MyFieldName").val(myValueGoesHere).trigger("change");
.done(function (obj) {
debugger;
$('#edit-form-partial').html(obj);
rebindvalidators();//rebind your validators after loading the html.
//$.validator = $('#frmSubmit').validate(
//{
// ignore: ":hidden"
//});
$('#modal-title').text('Edit Role');
$('#edit-form').modal('show');
});
第二条路
如果您真的需要动态加载表单的html内容,而不仅仅是数据
您可以尝试以下方法:
function rebindvalidators() {
var $form = $("#MyFormId");
$form.unbind();
$form.data("validator", null);
$.validator.unobtrusive.parse($form);
$form.validate($form.data("unobtrusiveValidation").options);
}
从已完成处理程序调用该函数,如下所示:
$("#MyFormId").trigger("reset");
$("#MyFieldName").trigger("change");
$("#MyFieldName").val(myValueGoesHere).trigger("change");
.done(function (obj) {
debugger;
$('#edit-form-partial').html(obj);
rebindvalidators();//rebind your validators after loading the html.
//$.validator = $('#frmSubmit').validate(
//{
// ignore: ":hidden"
//});
$('#modal-title').text('Edit Role');
$('#edit-form').modal('show');
});