根据DropDownList的值动态启用或禁用RequiredFieldValidator

Jer*_*emy 38 asp.net validation requiredfieldvalidator

我有一个带有三个文本输入的ASP.NET表单,分别用于"工作电话","家庭电话"和"手机".每个文本输入都有一个与之关联的RequiredFieldValidator.我还有一个DropDownList,用户可以在其中选择首选的手机类型.

我想只需要在DropDownList中选择的字段.例如,如果用户从DropDownList中选择"工作电话",我想禁用"家庭电话"和"手机"的RequiredFieldValidator,从而只需要"工作电话"字段.

我有一个方法,根据DropDownList的值启用和禁用这些验证器,但我无法弄清楚何时调用它.我希望在页面上进行验证之前运行此方法.我该怎么办?

hun*_*ter 41

您可以使用以下JavaScript执行此操作:

ValidatorEnable(RequiredFieldValidatorId, false);
Run Code Online (Sandbox Code Playgroud)

然后让你的下拉列表使用onchange事件(我建议使用jQuery)

$("#<%=dropDownList.ClientID %>").change(function(){
    var val = $(this).val();
    var skip = null;
    if (val == 1)
       skip = "workPhoneValidator";
    else if (val == 2)
       skip = "cellPhoneValidator";
    ....

    // by popular demand...
    var $skip = $("#" + skip)[0];

    if (skip != "workPhoneValidator") ValidatorEnable($skip, false);
    if (skip != "cellPhoneValidator") ValidatorEnable($skip, false);
    ....
});
Run Code Online (Sandbox Code Playgroud)

  • 我知道这是一个旧帖子,但`ValidatorEnable`的第一个参数是DOM元素,而不是字符串ID. (4认同)
  • @hunter`VeruatorEnable(RequiredFieldValidatorId,false);`应该是`ValidatorEnable(document.getElementById(RequiredFieldValidatorId),false);` (3认同)
  • **注意:**这将_not_停止服务器端验证,因此`Page.IsValid`将失败. (2认同)

Jas*_*n M 11

为什么不在这种情况下使用CustomValidator?关闭/打开RequiredFieldValidator可能会在将来导致设计问题 - 我会坚持在需要的字段上使用它们.

  • 我不同意.我将来看不出设计问题的方法.特别是在简单的情况下. (4认同)

小智 5

当您使用家庭电话时,在dropdown selectedindexchange事件中,使必需的字段验证器不可见.

喜欢..

如果选择了家庭电话,

homephonevalidator.visible=true
cellphonevalidator.visible=false
workphonevalidator.visible=false
Run Code Online (Sandbox Code Playgroud)

如果选择了手机,

homephonevalidator.visible=false
cellphonevalidator.visible=true 
workphonevalidator.visible=false
Run Code Online (Sandbox Code Playgroud)

如果选择了工作电话,

homephonevalidator.visible=false
cellphonevalidator.visible=false
workphonevalidator.visible=true
Run Code Online (Sandbox Code Playgroud)