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

时间:2010-03-31 16:50:58

标签: asp.net validation requiredfieldvalidator

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

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

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

7 个答案:

答案 0 :(得分:40)

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

ValidatorEnable(RequiredFieldValidatorId, false);

然后让你的下拉列表使用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);
    ....
});

答案 1 :(得分:11)

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

答案 2 :(得分:5)

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

像..

如果选择了家庭电话,

homephonevalidator.visible=true
cellphonevalidator.visible=false
workphonevalidator.visible=false

如果选择了手机,

homephonevalidator.visible=false
cellphonevalidator.visible=true 
workphonevalidator.visible=false

如果选择了工作电话,

homephonevalidator.visible=false
cellphonevalidator.visible=false
workphonevalidator.visible=true

答案 3 :(得分:2)

下拉的OnChange事件可能有类似的内容

function EnableValidator(){
    ValidatorEnable(requiredFieldValidator, validatorMustBeEnabled);
} 

检查此网址。 “客户端API”部分

http://msdn.microsoft.com/en-us/library/Aa479045#aspplusvalid_clientside

答案 4 :(得分:2)

可能的方式是:

  • 在您的DropDownList AutoPostBack="true"
  • 中设置
  • 在DropDownList的SelectedIndexChanged事件处理程序中启用/禁用验证程序
  • 在DropDownList CausesValidation="false"中设置,以避免验证程序在您更改DropDownList条目时阻止回发。

答案 5 :(得分:0)

DropDownlist的OnChange,您需要注册一个启用/禁用验证器的服务器端事件处理程序......

HTH

答案 6 :(得分:-1)

这是从jquery事件启用和禁用服务器端控制验证的好方法:

<label class="label_radio" for="Oversize"  onclick="EnableDisbledValidator('show')">show textbox</label>

<asp:TextBox ID="txtNote" runat="server" class="checkvalidation"></asp:TextBox>

 <asp:RequiredFieldValidator ID="rfvNote" runat="server" ControlToValidate="txtNote" SetFocusOnError="true" ErrorMessage="Please enter the note" Display="Dynamic" CssClass="error-tooltip"></asp:RequiredFieldValidator>

function EnableDisbledValidator(lblShow) {
    if (lblShow == "hide") {;
        ValidatorEnable($('#<%=rfvNote.ClientID %>')[0], false);

    } else {
        ValidatorEnable($('#<%=rfvNote.ClientID %>')[0], true);
    }
}