【问题标题】:Validate two controls (CustomValidator)验证两个控件 (CustomValidator)
【发布时间】:2013-04-19 19:02:42
【问题描述】:

在提交表单之前,我需要测试总和(txtA + txtB)是否大于 100。是否可以使用CustomValidator 执行此操作,因为我不知道是否可以选择 2 文本框控制验证

<asp:TextBox ID="txtA" runat="server"></asp:TextBox>
<asp:TextBox ID="txtB" runat="server"></asp:TextBox>
<asp:CustomValidator ID="CustomValidator2" 
                     runat="server" 
                     ErrorMessage="CustomValidator" />

<asp:Button ID="Button1" runat="server" Text="Button" />

谢谢。

【问题讨论】:

  • 是的,您可以这样做。您想要客户端还是服务器端验证?
  • 服务器端验证

标签: c# asp.net vb.net


【解决方案1】:

你可以这样做:

<asp:TextBox ID="txtA" runat="server" /> 
<asp:TextBox ID="txtB" runat="server" />
<asp:CustomValidator ID="CV1"runat="server" 
    OnServerValidate="ServerValidation" 
    ErrorMessage="Sum is less than 100" />

代码隐藏:

protected void ServerValidation(object source, ServerValidateEventArgs args)
{
    args.IsValid = int.Parse(txtA.Text)+ int.Parse(txtB.Text) >100;
}

【讨论】:

    【解决方案2】:

    当您在页面中放置自定义验证时,您可以将验证器链接到一个控件,但是如果您想对多个控件执行多个验证,则需要包含以下属性

     OnServerValidate="MyMethodOnServerSide" 
    

    并在服务器端定义该方法

    protected void MyMethodOnServerSide(object source, ServerValidateEventArgs args)
    {
         if (string.IsNullOrEmpty(mytxt1.Text) &&
                string.IsNullOrEmpty(mytxt2.Text))
                {
                    args.IsValid = false;
                    return;
                }
    
                args.IsValid = true;
    }
    

    只需将args.IsValid 属性分配给您需要的值。另一方面,验证是在您加载页面之前完成的,因此如果您单击一个按钮,该按钮执行一个操作,例如从数据库读取值以防万一一切正确,则在该操作上您需要包括以下检查。

    protected void cmdSearch_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
              LoadDataFromDB();
        }
    }
    

    args.IsValid 为假时,Page.IsValid 也为假。希望这会有所帮助

    【讨论】:

      【解决方案3】:

      您需要添加另一个控件&lt;asp:HiddenField&gt;,然后利用jQuery 设置该控件的值。它可能看起来像这样:

      标记

      <asp:HiddenField ID="SumOfValues" />
      <asp:CustomValidator ID="CustomValidator2"
          runat="server"
          ErrorMessage="CustomValidator"
          ControlToValidate="SumOfValues" />
      

      JQUERY

      $(document).ready(function() {
          $('#txtA').change(sumValues);
          $('#txtB').change(sumValues);
      });
      
      function sumValues() {
          var val1 = $('txtA').value();
          if (val1 === undefined) { val1 = 0; }
      
          var val2 = $('txtB').value();
          if (val2 === undefined) { val2 = 0; }
      
          $('#SumOfValues').value(val1 + val2);
      }
      

      这应该允许您验证隐藏的控件。但是,您需要确保对所有三个控件执行的一件事是利用 ClientIDMode 并将其设置为 Static,以便名称与您在到达页面时在标记中指定的名称完全相同。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 2012-09-11
      • 2023-03-23
      • 2011-06-06
      • 1970-01-01
      相关资源
      最近更新 更多