仅当字段在 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 中动态加载和添加字段

ASP.NET MVC5 - 更新数据库后创建不需要的字段

在 asp.net mvc razor 页面中验证 jquery 中的特定表单字段

使用 ASP.NET MVC 实现字段验证的最佳方法是啥? [关闭]