【问题标题】:asp:RequiredFieldValidator validation based on conditionsasp:RequiredFieldValidator 基于条件的验证
【发布时间】:2023-03-26 21:25:01
【问题描述】:

我有如下验证,但只希望在勾选复选框时触发。

<!-- 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 来完成它吗?
我只喜欢验证某个条件是否匹配。
目前,每次点击“保存”按钮时都会进行验证。

【问题讨论】:

  • 改用CustomValidator
  • 有什么例子吗?我的验证器需要基于多个控件和条件的交互。

标签: c# asp.net validation


【解决方案1】:

改用自定义验证器:

<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.

【讨论】:

  • 注意:如果您想知道为什么它不会在空文本框上触发,您必须在 CustomValidator 上设置 ValidateEmptyText="True"
【解决方案2】:

我通过在客户端添加以下 javascript 轻松解决了这个问题。

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

【讨论】:

  • Page.IsValid 在这种情况下为假
【解决方案3】:

你也可以试试这个

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

【讨论】:

  • 我没有代码,但我认为这行不通,因为我们正在进行客户端验证并且代码后面的代码不会受到影响?
  • 和我下面的评论一样。我已经确认了 in_visible 在说什么。这一直有效,直到验证器触发。一旦它触发,除非你满足它,否则它不能回发来禁用验证器。
【解决方案4】:

试试这个...

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

【讨论】:

  • 与我对另一个答案的回答类似。 “我没有代码,但我认为这不会起作用,因为我们正在进行客户端验证并且代码后面的代码不会受到影响?”
  • 这一直有效,直到验证器触发。一旦它触发,除非你满足它,否则它不能回发以禁用验证器。
【解决方案5】:

您可以从 Javascript/jQuery 启用/禁用 RequiredFieldValidator。 对于您的情况,当 Checkbox 被选中 时:- 只需调用 javascript 函数来启用 RequiredFieldValidator 并且当它的 Uncheck 只是禁用 RequiredFieldValidator。

对于下拉索引更改、文本框值更改和单选按钮选择更改等其他条件,您可以分别调用其 onchange、onblur、onclick 和 执行所需条件后,您可以启用/禁用 RequiredFieldValidator

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2020-06-15
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    相关资源
    最近更新 更多