7

我有一个下拉菜单,用户可以在其中选择一个国家/地区。这是一个必需的“字段”。

在它旁边,有一个名为 State 的文本字段。如果用户选择 US,则字段 State 是必需的。如果用户选择例如瑞典,则不需要国家,因为瑞典没有国家。

示例代码:

<asp:DropDownList runat="server" ID="Country"></asp:DropDownList>
<asp:RequiredFieldValidator ControlToValidate="Country"
                runat="server" Display="Static" ErrorMessage="Required field" />

<asp:TextBox runat="server" ID="State"></asp:TextBox>
<asp:CustomValidator ClientValidationFunction="DoesntGetFiredIfStateIsEmpty"
                runat="server" Display="Static" ErrorMessage="Required field" />

<!-- SO, RATHER THIS TOGETHER WITH CONDITIONAL FIRING -->
<asp:RequiredFieldValidator ControlToValidate="State"
                runat="server" Display="Static" ErrorMessage="Required field" />

我的问题是:当它为空时,我怎样才能使这个 CustomValidator 触发验证?

或者更简单地说:我怎样才能有条件地触发RequiredValidator?

或者最简单:如何在客户端启用/禁用RequiredValidator?

4

2 回答 2

10

尝试使用 javascript 来启用和禁用验证器

ValidatorEnable(RequiredFieldValidatorId, false);

看看我回答的这个问题

于 2010-04-23T15:07:05.530 回答
1

Asp.net 有一个客户端 javascript 函数来管理验证器,“ValidatorEnable”函数,

ValidatorEnable(RequiredFieldValidatorId, false);

您可以简单地使用 javascript 调用它,您必须将验证器对象发送到函数(不仅是它的 id)。

if (x==y) {
        ValidatorEnable($('#<%=rfvFamily.ClientID %>'), false);    
    } else {
        ValidatorEnable($('#<%=rfvFamily.ClientID %>'), true);
    }

或者

if (x==y) {
        ValidatorEnable(document.getElementById("<%=rfvFamily.ClientID %>", false);    
    } else {
        ValidatorEnable(document.getElementById("<%=rfvFamily.ClientID %>", true);
    }

完整文档:http: //msdn.microsoft.com/en-us/library/Aa479045#aspplusvalid_clientside

另一种方法是在您的 DropDownList CausesValidation="false" 中设置,以避免在您更改 DropDownList 条目时验证器阻止回发。

(*) 请记住此功能是针对客户端的,要在服务器端禁用验证器,您也必须在页面回发时禁用验证器。

if (IsPostBack){
    if (x==y) {
        rfvFamily.Enabled = false;
    }
}
于 2018-12-10T18:12:32.643 回答