【问题标题】:How to limit the number of characters allowed in a textbox?如何限制文本框中允许的字符数?
【发布时间】:2019-02-23 12:05:02
【问题描述】:
<asp:TextBox ID="txtBodySMS" runat="server" Rows="10"                          
           TextMode="MultiLine" Width="100%"></asp:TextBox>

这是我的文本框。如何限制用户可以在其中输入的字符数?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    MaxLength 不适用于 ASP.NET 到带有TextMode="MultiLine" 的文本框。要做到这一点并保持MultiLine 标记的简单方法是添加:

    onkeypress="return this.value.length<=10" 
    

    10 是限制。像这样:

    <asp:TextBox ID="txtBodySMS" runat="server" Rows="10" onkeypress="return this.value.length<=10" TextMode="MultiLine" Width="100%"></asp:TextBox>
    

     

    编辑选项一(服务器端) 多年来,上面的示例指出了一些问题。根本问题是多行 textBox 被呈现为文本区域,MaxLength 被删除。我们也可以通过强制重新附加MaxLength而不是附加onkeypress来修复页面后面的C#或VB asp.net代码。

        protected void Page_Load(object sender, EventArgs e)
        {
            txtBodySMS.Attributes.Add("maxlength", "10");
        }
    

    编辑选项二(客户端):这是一个简单的 jquery 解决方案。将以下脚本包含在您的脑海中,而不是附加 onkeypress 或编辑服务器端代码。

        $(document).ready(function () {
            $(".MultiLineLimit").on('change keydown paste input', function () {
                this.value = (this.value.length <= 10 ? this.value : this.value.substring(0, 10));
            });
        });
    

    现在只需将MultiLineLimitclass 添加到TextMode="MultiLine" 的任何&lt;asp:TextBox&gt; 文本框。

    <asp:TextBox ID="txtBodySMS" CssClass="MultiLineLimit" runat="server" Rows="10" TextMode="MultiLine" Width="100%"></asp:TextBox>
    

    请记住,在任何一种情况下都可以删除客户端验证。如果您将其存储在数据库中,则它也应始终在服务器端进行验证。

    【讨论】:

    • 但是当你达到字符限制时 - 文本框被冻结,你不能从中删除任何内容
    • 这适用于 keydowns,但使用 ctrl+v 将大量文本粘贴到框中会破坏这一点,您仍然可以输入尽可能多的内容
    • @Rich 你们说的都是对的,这些年来我都没有注意到这一点。我已经修复了
    【解决方案2】:

    这是为我做的。我没有保留 MultiLine 属性。

    <asp:TextBox ID="txtBodySMS" runat="server" Rows="10" MaxLength="2" Width="100%"></asp:TextBox>
    

    【讨论】:

      【解决方案3】:

      MaxLength="Int32"

      <asp:TextBox ID="txtBodySMS" runat="server" Rows="10" MaxLength="220"                         
                 TextMode="MultiLine" Width="100%"></asp:TextBox>
      

      【讨论】:

      • 那不行,他们仍然可以输入超过 220 个字符
      • 那么有问题,这是微软记录的财产
      • 不是,需要取出多行
      【解决方案4】:

      最大字符长度验证(最多允许 8 个字符)

      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
      <asp:RegularExpressionValidator Display = "Dynamic" ControlToValidate = "TextBox1" ID="RegularExpressionValidator1" ValidationExpression = "^[\s\S]{0,8}$" runat="server" ErrorMessage="Maximum 8 characters allowed."></asp:RegularExpressionValidator>
      

      最小字符长度验证(至少需要 8 个字符)

      <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
      <asp:RegularExpressionValidator Display = "Dynamic" ControlToValidate = "TextBox2" ID="RegularExpressionValidator2" ValidationExpression = "^[\s\S]{8,}$" runat="server" ErrorMessage="Minimum 8 characters required."></asp:RegularExpressionValidator>
      

      最小和最大字符长度验证(需要最少 5 个和最多 8 个字符)

      <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
      <asp:RegularExpressionValidator Display = "Dynamic" ControlToValidate = "TextBox3" ID="RegularExpressionValidator3" ValidationExpression = "^[\s\S]{5,8}$" runat="server" ErrorMessage="Minimum 5 and Maximum 8 characters required."></asp:RegularExpressionValidator>
      

      【讨论】:

        【解决方案5】:

        AFAIK maxlength 从未与“多行”模式结合使用。因此我会建议一些客户端 js/jquery 和服务器端来解决这个问题。

        【讨论】:

          【解决方案6】:

          只需在 .cs 页面加载中输入以下两行

          textbox1.Attributes.Remove("MaxLength");
          textbox1.Attributes.Add("MaxLength", "30");
          

          希望它会有所帮助!

          【讨论】:

          • 当用户复制/粘贴到文本框时,投票最多的答案不起作用。所以这个答案的修改版本(即在 javascript/jquery 中处理)效果最好。
          【解决方案7】:

          将 MaxLength 属性设置为字符数。

          【讨论】:

            【解决方案8】:

            您正在寻找 MaxLength:看here

            【讨论】:

              【解决方案9】:

              您是否尝试过在 TextBox 上设置 MaxLength 属性?为Reference

              【讨论】:

                【解决方案10】:

                为您的文本框添加 FliterTextBoxExtender 类型的扩展器
                应该是这样的

                <asp:TextBox ID="TxtCellular" runat="server"></asp:TextBox>
                <asp:FilteredTextBoxExtender ID="TxtCellular_FilteredTextBoxExtender" 
                                    runat="server" Enabled="True" TargetControlID="TxtCellular" FilterType="Numbers">
                </asp:FilteredTextBoxExtender>
                

                【讨论】:

                  【解决方案11】:

                  请务必注意,单独使用 MaxLength(无需添加其他属性,就像其他答案一样)仅适用于 .NET Framework 4.5 及更高版本中的项目。

                  我使用的是 4.5,它适用于我的项目

                  <asp:TextBox ID="txtSample" MaxLength="3" runat="server"/>
                  

                  TextBox.MaxLength Property (MSDN Documentation)

                  【讨论】:

                    【解决方案12】:

                    在 ASP.NET 的设计中似乎是一个奇怪的疏忽(撇开 textareas 的异常),您可以设置文本框的 MaxLength 属性,但似乎无法在服务器端强制执行此限制没有明确添加验证器。如果您有很多字段并且只是想确保没有人通过注入自己的 POST 数据来破坏表单的限制,那将是一件麻烦事。所以我写了这个,这似乎可以解决问题 - 显然你可能不想强制 Response.End

                    Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
                    
                            Dim colControls As Collection = New Collection
                            getControlList(colControls, Me)
                            For Each ctlNextPlease As Control In colControls
                                If TypeOf (ctlNextPlease) Is TextBox Then
                                    Dim ctlTextBox As TextBox = ctlNextPlease
                                    If Len(Request(ctlTextBox.ID)) > ctlTextBox.MaxLength Then
                                        Response.Write("The value <i>" & Request(ctlTextBox.ID) & "</i> submitted for <b>" & ctlTextBox.ID & "</b> exceeds the permitted maximum length (" & ctlTextBox.MaxLength & ") for that value")
                                        Response.End()
                                    End If
                                End If
                            Next
                    ...
                    End Sub
                    
                    Public Shared Sub getControlList(ByRef colControls As Collection, ByVal rootControl As Control)
                      colControls.Add(rootControl)
                      If rootControl.Controls.Count > 0 Then
                        For Each controlToSearch As Control In rootControl.Controls
                          getControlList(colControls, controlToSearch)
                        Next
                      End If
                    End Sub
                    

                    【讨论】:

                      【解决方案13】:
                      <asp:TextBox ID="txtBodySMS" runat="server" Rows="10" MaxLength="220" 
                          TextMode="MultiLine" Width="100%">
                      </asp:TextBox>
                      

                      【讨论】:

                      • 纯代码答案是低质量的答案。
                      • 您需要在代码中添加描述,否则将被视为低质量答案
                      猜你喜欢
                      • 2013-12-19
                      • 1970-01-01
                      • 2012-01-22
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多