根据DropDownList的值dynamic启用或禁用RequiredFieldValidator

我有一个ASP.NET窗体,有三个文本input,分别是“工作电话”,“家庭电话”和“手机”。 每个文本input都有一个与之关联的RequiredFieldValidator。 我也有一个DropDownList用户可以select首选的电话types。

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

我有一个方法,启用和禁用这些validation器基于DropDownList的值,但我不知道什么时候调用它。 我希望这个方法在validation发生在页面上之前运行。 我该怎么做?

为什么不在这种情况下使用CustomValidator? closures/打开RequiredFieldValidator可能会导致将来的devise问题 – 我会坚持使用它们在需要的领域。

你可以用这样的JavaScript来做到这一点:

ValidatorEnable(RequiredFieldValidatorId, false); 

然后让你的下拉列表使用onchange事件(我build议使用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); .... }); 

当您使用家庭电话时,在下拉列表中selectindex change事件,使所需的字段validation程序不可见。

喜欢..

如果select了家庭电话,

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

如果select手机,

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

如果select了工作电话,

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

下拉的OnChange事件你可能有这样的事情

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

检查这个url。 “客户端API”部分

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

可能的方法是:

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

OnChange的DropDownlist,你将需要注册一个服务器端的事件处理程序,启用/禁用validation程序…

HTH

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

 <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); } }