2013-05-28 100 views
16

我有如下验证,但只有当勾选复选框时才会触发。asp:RequiredFieldValidator验证根据条件

<!-- TextBox and its validator --> 
Name: <asp:TextBox ID="TextBox1" runat="server" /> 

<asp:RequiredFieldValidator runat="server" 
     ID="RequiredFieldValidator1" 
     Text="*" 
     ErrorMessage="Name is required" 
     ControlToValidate="TextBox1" /> 

我可以用asp:RequiredFieldValidator完成它吗?
我只想验证某个条件是否匹配。
当前每次单击“保存”按钮时都会进行验证。

+1

使用“CustomValidator”代替 – mshsayem

+0

任何示例?我的验证器需要基于多个控件和条件的交互。 – ove

回答

7

我很容易解决这个问题,在客户端添加以下javascript。

ValidatorEnable(document.getElementById("RequiredFieldValidator1"), true); or 
ValidatorEnable(document.getElementById("RequiredFieldValidator2"), false); 
+0

精彩!有点黑客,但很聪明。 – Jaider

+4

在这种情况下,Page.IsValid将为false –

28

使用自定义的验证,而不是:

<asp:CustomValidator ID="cv1" runat="server" 
     ErrorMessage="Name is required" 
     Text="*" 
     ControlToValidate="TextBox1" 
     ValidateEmptyText="True" 
     ClientValidationFunction="validate" /> 

和脚本(只检查一个复选框和文本框的值作为例子,你可以使用自定义逻辑):

<script type="text/javascript"> 
    function validate(s,args){ 
     if(document.getElementById("<%= checkboxId.ClientID %>").checked){ 
      args.IsValid = args.Value != ''; 

     } 
     else{ 
      args.IsValid = true; 
     } 
    } 
</script> 

这将做客户端验证。如果您还需要服务器验证,请添加OnServerValidate属性以及代码后面的处理程序。 See here for details

+9

注意:如果您想知道为什么它不会在空的文本框中触发,则必须在CustomValidator上设置“ValidateEmptyText =”True“'。 – arnaudoff

0

你也可以试试这个

protected void CheckBox_CheckedChanged(object sender, EventArgs e) 
{ 

    if(CheckBox.Checked) 
    { 
     RequiredFieldValidator1.Enabled = true; 
     RequiredFieldValidator1.ValidationGroup = "anything"; 
     Button1.ValidationGroup = "anything";// your save button 

    } 
    else 
    { 
     RequiredFieldValidator1.Enabled = false; 
     RequiredFieldValidator1.ValidationGroup = string.Empty; 
     Button1.ValidationGroup = string.Empty; // save button 
    } 
} 
+0

没有我的代码,但我不认为这将工作,因为我们正在做客户端验证和代码背后的代码不会受到打击? – ove

+0

和我下面的评论一样。我已经确认了in_visible在说什么。这个工作直到验证器启动。一旦启动,除非您满意,否则无法回发以禁用验证器。 –

0

尝试......

protected void RequiredFieldValidator1_Load(object sender, EventArgs e) 
{ 
    if (CheckBox1.Checked == true) 
    { 
     RequiredFieldValidator1.Enabled = true; 
    } 
    else if (CheckBox1.Checked == false) 
    { 
     RequiredFieldValidator1.Enabled = false; 
    } 
} 
+1

与我对其他答案的回复类似。 “没有我的代码,但我不认为这将工作,因为我们正在做客户端验证,并且代码背后的代码不会被打到?” – ove

+0

这个工作直到验证器启动。一旦启动,除非您满意,否则无法回发以禁用验证器。 –

0

您可以启用/禁用的的RequiredFieldValidator将Javascript/jQuery的。 根据您的情况,当复选框被选中时: - 只需调用javascript函数启用RequiredFieldValidator,并在其取消选中时仅关闭RequiredFieldValidator。

的其他条件等下拉指数变化,文本框的值的变化和单选按钮选择变化可以调用其平变化,的onblur,分别的onclick和 执行所要求的条件后,可以启用/禁用的RequiredFieldValidator

希望这对你有所帮助。