jQuery Validate 正在使用 ASP.NET MVC 局部视图,但不使用编辑器模板
jQuery Validate is working with ASP.NET MVC Partial View but not Editor Templates
我有一个 EditorTemplate PatientProfile 视图,它在一个子模型中传递,其中有 2 个字段用于 2 个输入。然后我尝试使用 jQuery validate 来验证这 2 个输入字段,但它不起作用。
然而,当我尝试将那个确切的视图创建为局部视图时,即在共享文件夹下有确切的 PatientProfile 视图,然后使用
调用它
@Html.Partial("PatientProfile", Model.PatientProfile)
然后验证工作。
Form.cshtml 查看该调用以呈现 PatientProfile 视图
@model Test.Models.FormGroup1
@{
ViewBag.Title = "FormGroup1";
Layout = "~/Views/Shared/_ContainerLayout.cshtml";
}
@Html.Partial("PatientProfile", Model.PatientProfile) @* Validation Works *@
@Html.EditorFor(m => m.PatientProfile) @* Renders but validation does not work *@
PatientProfile.chstml 查看
@model Test.Models.PatientProfile
<form id="PatientProfile" class="form-horizontal" action="@Url.Action("PatientProfile", "Form")" method="post" autocomplete="off">
<div class="row">
<div class="col-md-6">
<div class="form-group row">
<label class="col-md-2 col-sm-2 col-form-label control-label">Firstname</label>
<div class="col-md-10 col-sm-10 validateInput">
@Html.TextBoxFor(model => model.Firstname.Value, new { @class = "form-control", placeholder = "", tabindex = "2" })
@Html.ValidationMessageFor(model => model.Firstname.Value, "", new { @class = "text-danger" })
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group row">
<label class="col-md-2 col-md-2 col-sm-2 col-form-label control-label">Lastname</label>
<div class="col-md-10 col-sm-10 validateInput">
@Html.TextBoxFor(model => model.Lastname.Value, new { @class = "form-control", placeholder = "", tabindex = "3" })
@Html.ValidationMessageFor(model => model.Lastname.Value, "", new { @class = "text-danger" })
</div>
</div>
</div>
</div>
</form>
<script>
$(document).ready(function () {
$("#PatientProfile").validate({
onfocusout: function (element) {
$(element).valid();
},
rules: {
"Firstname.Value": { required: true },
"Lastname.Value": { required: true },
},
errorElement: "em",
errorPlacement: function (error, element) {
error.addClass("help-block");
if (element.prop("type") === "checkbox") {
error.insertAfter(element.parent("label"));
} else {
error.insertAfter(element);
}
},
highlight: function (element, errorClass, validClass) {
$(element).parents(".validateInput").addClass("has-error").removeClass("has-success");
},
unhighlight: function (element, errorClass, validClass) {
$(element).parents(".validateInput").removeClass("has-error");
},
});
});
</script>
如何让验证与 EditorFor(m => m.PatientProfile) 一起工作?我需要它与 EditorFor 一起使用,因为字段需要 updated/edited,我认为我不能使用部分视图,如果我错了请纠正我。
如果您使用浏览器检查工具查看输入字段,您可能会发现它们的名称与您预期的不同。
在编辑器模板中,holding 属性 被设置为前缀,因此根据记忆,它们看起来像
PatientProfile.FirstName.Value
如果你想改变它,你可以在你的编辑器模板中做
@model Test.Models.PatientProfile
@{
ViewData.TemplateInfo.HtmlFieldPrefix = string.Empty;
}
这将从字段名称中删除 PatientProfile
我有一个 EditorTemplate PatientProfile 视图,它在一个子模型中传递,其中有 2 个字段用于 2 个输入。然后我尝试使用 jQuery validate 来验证这 2 个输入字段,但它不起作用。
然而,当我尝试将那个确切的视图创建为局部视图时,即在共享文件夹下有确切的 PatientProfile 视图,然后使用
调用它@Html.Partial("PatientProfile", Model.PatientProfile)
然后验证工作。
Form.cshtml 查看该调用以呈现 PatientProfile 视图
@model Test.Models.FormGroup1
@{
ViewBag.Title = "FormGroup1";
Layout = "~/Views/Shared/_ContainerLayout.cshtml";
}
@Html.Partial("PatientProfile", Model.PatientProfile) @* Validation Works *@
@Html.EditorFor(m => m.PatientProfile) @* Renders but validation does not work *@
PatientProfile.chstml 查看
@model Test.Models.PatientProfile
<form id="PatientProfile" class="form-horizontal" action="@Url.Action("PatientProfile", "Form")" method="post" autocomplete="off">
<div class="row">
<div class="col-md-6">
<div class="form-group row">
<label class="col-md-2 col-sm-2 col-form-label control-label">Firstname</label>
<div class="col-md-10 col-sm-10 validateInput">
@Html.TextBoxFor(model => model.Firstname.Value, new { @class = "form-control", placeholder = "", tabindex = "2" })
@Html.ValidationMessageFor(model => model.Firstname.Value, "", new { @class = "text-danger" })
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group row">
<label class="col-md-2 col-md-2 col-sm-2 col-form-label control-label">Lastname</label>
<div class="col-md-10 col-sm-10 validateInput">
@Html.TextBoxFor(model => model.Lastname.Value, new { @class = "form-control", placeholder = "", tabindex = "3" })
@Html.ValidationMessageFor(model => model.Lastname.Value, "", new { @class = "text-danger" })
</div>
</div>
</div>
</div>
</form>
<script>
$(document).ready(function () {
$("#PatientProfile").validate({
onfocusout: function (element) {
$(element).valid();
},
rules: {
"Firstname.Value": { required: true },
"Lastname.Value": { required: true },
},
errorElement: "em",
errorPlacement: function (error, element) {
error.addClass("help-block");
if (element.prop("type") === "checkbox") {
error.insertAfter(element.parent("label"));
} else {
error.insertAfter(element);
}
},
highlight: function (element, errorClass, validClass) {
$(element).parents(".validateInput").addClass("has-error").removeClass("has-success");
},
unhighlight: function (element, errorClass, validClass) {
$(element).parents(".validateInput").removeClass("has-error");
},
});
});
</script>
如何让验证与 EditorFor(m => m.PatientProfile) 一起工作?我需要它与 EditorFor 一起使用,因为字段需要 updated/edited,我认为我不能使用部分视图,如果我错了请纠正我。
如果您使用浏览器检查工具查看输入字段,您可能会发现它们的名称与您预期的不同。
在编辑器模板中,holding 属性 被设置为前缀,因此根据记忆,它们看起来像
PatientProfile.FirstName.Value
如果你想改变它,你可以在你的编辑器模板中做
@model Test.Models.PatientProfile
@{
ViewData.TemplateInfo.HtmlFieldPrefix = string.Empty;
}
这将从字段名称中删除 PatientProfile