【问题标题】:Limiting Contents of a TextBox Visual Studio C#限制 TextBox Visual Studio C# 的内容
【发布时间】:2012-10-20 13:15:09
【问题描述】:

我正在尝试限制用户输入,以便用户只能向名为 OrderID 的文本框输入数字,并且只能向名为 CustomerName 的文本框输入字母。

是否可以在 Visual Studio Web 应用程序窗体中执行此操作?用 C# 编码。如果是这样,我该怎么做?

如果用户在上述实现后尝试输入无效数据类型,我还必须处理异常。

如何做到这一点?任何帮助深表感谢! :)

【问题讨论】:

    标签: c# visual-studio-2010 web-applications error-handling textbox


    【解决方案1】:

    使用正则表达式
    对于文本使用它-^[a-zA-Z]*$.
    使用 CompareValidator,用于数字

    <asp:TextBox ID="txt" runat="server />
    <asp:CompareValidator ID="cv" runat="server" ControlToValidate="txt" Type="Integer"
       Operator="DataTypeCheck" ErrorMessage="Value must be an integer!" />
    

    【讨论】:

      【解决方案2】:

      您可以通过扩展 TextBox 类来实现这一点,如下所示: 我已经为一个项目完成了这项工作。

      在 AssemblyInfo.cs 类中添加这一行:

      [assembly: WebResource("Web.Controls.Javascript.NumberBox.js", "text/javascript")]
      

      C# 类:

      public sealed class NumberBox : TextBox
      {
          protected override void OnPreRender(EventArgs e)
          {
              RegisterIncludeScripts();
      
              this.Attributes.Add("onkeydown", "return NumberBox_KeyDown(this, event);");
              this.Attributes.Add("onkeyup", "return NumberBox_KeyUp(this, event);");
              this.Attributes.Add("onblur", "NumberBox_Blur(this);");
              this.Attributes.Add("onpaste", "NumberBox_Paste(this);");
      
              base.OnPreRender(e);
          }
      
          private void RegisterIncludeScripts()
          {
              this.Page.ClientScript.RegisterClientScriptResource(typeof(TextBox), "Web.Controls.Javascript.NumberBox.js");
          }
      
          public int Number
          {
              get
              {
                  if (this.Text.Equals(String.Empty)) return -1;
                  else return Convert.ToInt32(this.Text);
              }
          }
      }
      

      JavaScript:

      function NumberBox_KeyDown(control, e) {
          var keynum = GetKeystroke(e);
      
          if (IsFuncKey(keynum))
              return true;
      
          var keychar = String.fromCharCode(keynum);
      
          if (NumberBox_IsExceedingLimit(control, control.value + keychar))
              return false;
      
          if (keynum >= 96 && keynum <= 105)
              return true;
      
          var numcheck = /\d/;
          return numcheck.test(keychar);
      }
      
      function NumberBox_KeyUp(control, e) {
          var keynum = GetKeystroke(e);
      
          if (IsFuncKey(keynum))
              return true;
      
          control.value = control.value.replace(/[^0-9 ]/g, '');
      }
      
      function NumberBox_Paste(control) {
          control.value = control.value.replace(/[^0-9 ]/g, '');
          if (NumberBox_IsExceedingLimit(control)) {
              control.value = control.value.substring(0, control.value.length - 1);
          }
      }
      
      function NumberBox_Blur(control) {
          control.value = control.value.replace(/[^0-9 ]/g, '');
          if (NumberBox_IsExceedingLimit(control)) {
              control.value = control.value.substring(0, control.value.length - 1);
          }
      }
      
      function NumberBox_IsExceedingLimit(control, value) {
          var maxValue = control.attributes["maxValue"].value;
          var value = String(value);
      
          if (value.length > maxValue) {
              return true;
          }
          return false;
      }
      
      function NumberBox_IsExceedingLimit_IsInsideBoundary(control, value) {
          var minValue = control.attributes["minValue"].value;
          var maxValue = control.attributes["maxValue"].value;
          var value = String(value);
      
          if (value.length >= minValue && value.length <= maxValue) {
              return true;
          }
          return false;
      }
      

      【讨论】:

        【解决方案3】:

        您可以使用比较验证器,这是我如何检查数据类型的示例:

                    <asp:TextBox ID="TextBoxServiceDate" CssClass="OneColumnText" runat="server" Text='<%# Bind("ServiceDate","{0:d}")  %>'
                        ValidationGroup="update"></asp:TextBox>*
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="TextBoxServiceDate"
                        Display="None" ErrorMessage="<% $resources:AppResource,ServiceDateRequired %>"
                        ValidationGroup="update"></asp:RequiredFieldValidator>
                    <asp:CompareValidator ID="CompareValidatorQuantity" runat="server" ControlToValidate="TextBoxServiceDate" ValidationGroup="update" Display="None"
                        Type="Date" Operator="DataTypeCheck" ErrorMessage='<% $Resources:AppResource,NotValidDateTime %>' />
                    <br />
        

        在此示例中,有两个验证器。第一个仅用于检查必填字段,第二个用于检查数据类型,在本例中为日期。当然,如果需要,您也可以检查数字,您还可以使用自定义验证器来满足更复杂的需求。这看起来像这样:

            <asp:CustomValidator ID="CustomValidatorDate1" runat="server" ControlToValidate="DateFromTextBox"
                ErrorMessage='<% $resources:AppResource,NotValidDateTime %>' Display="Dynamic"
                onservervalidate="CustomValidatorDate1_ServerValidate"></asp:CustomValidator>
        

        还有处理程序...

            protected void CustomValidatorDate1_ServerValidate(object source, ServerValidateEventArgs args)
            {
                if (!string.IsNullOrEmpty(args.Value))
                {
                    DateTime d = new DateTime();
                    if (!DateTime.TryParse(args.Value, out d))
                    {
                        args.IsValid = false;
                    }
                    else
                    {
                        args.IsValid = true;
                    }
                }
                else
                {
                    args.IsValid = true;
                }
            }
        

        要显示验证消息,您可以使用动态模式或只是验证摘要,如下所示:

        <asp:ValidationSummary ID="ValidationSummary1" runat="server" ValidationGroup="Insert" />
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-03-17
          • 2016-07-22
          • 2011-02-17
          • 1970-01-01
          • 1970-01-01
          • 2019-02-27
          • 1970-01-01
          • 2023-04-04
          相关资源
          最近更新 更多