38

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

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

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

4

7 回答 7

41

您可以使用 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);
    ....
});
于 2010-03-31T17:05:31.360 回答
11

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

于 2010-04-07T03:46:51.390 回答
5

当您使用家庭电话时,在下拉 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
于 2011-08-17T13:05:05.383 回答
2

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

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

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

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

于 2010-03-31T17:06:32.293 回答
2

可能的方法是:

  • 在您的 DropDownList 中设置AutoPostBack="true"
  • SelectedIndexChangedDropDownList 的事件处理程序中启用/禁用您的验证器
  • 在您的 DropDownList 中设置CausesValidation="false"以避免在您更改 DropDownList 条目时验证器阻止回发。
于 2010-03-31T17:17:28.687 回答
0

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

高温高压

于 2010-03-31T16:55:00.960 回答
-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);
    }
}
于 2015-07-21T16:00:58.853 回答