仅当字段在 asp.net mvc 中可见时才需要字段验证
Posted
技术标签:
【中文标题】仅当字段在 asp.net mvc 中可见时才需要字段验证【英文标题】:Required Field Validation only when field is visible in asp.net mvc 【发布时间】:2018-07-31 16:45:04 【问题描述】:我有一个复选框,您可以在其中隐藏/显示日期选择器字段。
但是当 datepicker 字段被隐藏时,必须没有验证。
这是复选框:
@html.CheckBox("showEindDatum", (Request.Form["showEindDatum"] ?? string.Empty).Contains("true"))
这是日期选择器:
@FormGroupHelper.CreateFormGroup(Html, m => m.EindDatum, Html.Kendo().DatePickerFor(m => m.EindDatum).Min(Model.EindDatum.HasValue ? Model.EindDatum.Value : DateTime.Today).Format("dd-MM-yyyy").ParseFormats(new string[] "ddMMyyyy" ))
此字段的属性如下所示:
[Display(Name = "Einddatum wijziging")]
[Required(ErrorMessageResourceType = typeof(Messages), ErrorMessageResourceName = "Global_Validatie_VeldVerplicht")]
public DateTime? EindDatum get; set;
public bool showEindDatum get; set;
这是它的jquery:
if ($('#showEindDatum').prop('checked'))
$(".EinddatumDatepicker").show();
$("#meldingEindDatumCheck").show();
else
$(".EinddatumDatepicker").hide();
$("#meldingEindDatumCheck").hide();
$("#showEindDatum").on("click", function ()
$(".EinddatumDatepicker").toggle(this.checked);
$("#meldingEindDatumCheck").toggle(this.checked);
);
那么当 datepicker 字段被隐藏时,我必须改变什么没有验证?
谢谢
所以你的意思是:
$.validator.setDefaults( ignore: null );
if ($('#showEindDatum').prop('checked'))
$(".EinddatumDatepicker").show();
$("#meldingEindDatumCheck").show();
$("#geenEinddatumIngevuld").hide();
else
$(".EinddatumDatepicker").hide();
$("#meldingEindDatumCheck").hide();
$("#geenEinddatumIngevuld").show();
$("#showEindDatum").on("click", function ()
$(".EinddatumDatepicker").toggle(this.checked);
$("#meldingEindDatumCheck").toggle(this.checked);
$("#geenEinddatumIngevuld").toggle(this.checked);
);
这不起作用。
但是表单也有一个 post 方法,像这样:
using (Html.BeginForm("Formulier", "PersoneelsDossier", FormMethod.Post, new @id = "PDForm", name = "PDForm" ))
你的意思是这样的:
$(document).ready(function ()
//$("#PDForm").data("validator").settings.ignore = ".ignore, :hidden";
if ($('#showEindDatum').prop('checked'))
$(".EinddatumDatepicker").show();
$("#meldingEindDatumCheck").show();
$("#geenEinddatumIngevuld").hide();
else
$(".EinddatumDatepicker").hide();
$("#meldingEindDatumCheck").hide();
$("#geenEinddatumIngevuld").show();
$("#showEindDatum").on("click", function ()
$(".EinddatumDatepicker").toggle(this.checked);
$("#meldingEindDatumCheck").toggle(this.checked);
$("#geenEinddatumIngevuld").toggle(this.checked);
);
$.validator.setDefaults( ignore: null );
);
你的意思是这样的:
$.validator.setDefaults( ignore: null );
if ($('#showEindDatum').prop('checked'))
$(".EinddatumDatepicker").show();
$("#meldingEindDatumCheck").show();
$("#geenEinddatumIngevuld").hide();
else
$(".EinddatumDatepicker").hide();
$("#meldingEindDatumCheck").hide();
$("#geenEinddatumIngevuld").show();
$("#showEindDatum").on("click", function ()
$(".EinddatumDatepicker").toggle(this.checked);
$("#meldingEindDatumCheck").toggle(this.checked);
$("#geenEinddatumIngevuld").toggle(this.checked);
);
没用
【问题讨论】:
您使用条件验证属性,例如foolproof[RequiredIf]
属性(或者要学习如何编写自己的属性,请参阅The Complete Guide To Validation In ASP.NET MVC 3 - Part 2
【参考方案1】:
默认情况下,jQuery validate 会忽略隐藏字段、宽度和高度为零的元素、具有 css display:none 的元素以及任何具有不可见父元素的元素(使用相同的标准)。
但是可以通过添加以下脚本来覆盖忽略设置
// By default validator ignores hidden fields.
// change the setting here to ignore nothing
$.validator.setDefaults( ignore: null );
【讨论】:
谢谢。但这不起作用。我更新了帖子。 @thecodeEngine 你在验证运行之前放了吗? 什么意思? Jquery 在表单字段下。是的。 @thecodeEngine 这需要立即放在 jquery validate load 下 @thecodeEngine 尝试将第一条语句放在文档就绪函数中以上是关于仅当字段在 asp.net mvc 中可见时才需要字段验证的主要内容,如果未能解决你的问题,请参考以下文章
Css 在 asp.net mvc3 Razor Views 中无法正常工作
如何在 ASP.NET MVC 中执行辅助操作(即计算字段)?
在 ASP.Net Web 表单/MVC 中动态加载和添加字段