【发布时间】:2019-02-23 12:05:02
【问题描述】:
<asp:TextBox ID="txtBodySMS" runat="server" Rows="10"
TextMode="MultiLine" Width="100%"></asp:TextBox>
这是我的文本框。如何限制用户可以在其中输入的字符数?
【问题讨论】:
标签: asp.net
<asp:TextBox ID="txtBodySMS" runat="server" Rows="10"
TextMode="MultiLine" Width="100%"></asp:TextBox>
这是我的文本框。如何限制用户可以在其中输入的字符数?
【问题讨论】:
标签: asp.net
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" 的任何<asp:TextBox> 文本框。
<asp:TextBox ID="txtBodySMS" CssClass="MultiLineLimit" runat="server" Rows="10" TextMode="MultiLine" Width="100%"></asp:TextBox>
请记住,在任何一种情况下都可以删除客户端验证。如果您将其存储在数据库中,则它也应始终在服务器端进行验证。
【讨论】:
这是为我做的。我没有保留 MultiLine 属性。
<asp:TextBox ID="txtBodySMS" runat="server" Rows="10" MaxLength="2" Width="100%"></asp:TextBox>
【讨论】:
MaxLength="Int32"
<asp:TextBox ID="txtBodySMS" runat="server" Rows="10" MaxLength="220"
TextMode="MultiLine" Width="100%"></asp:TextBox>
【讨论】:
最大字符长度验证(最多允许 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>
【讨论】:
AFAIK maxlength 从未与“多行”模式结合使用。因此我会建议一些客户端 js/jquery 和服务器端来解决这个问题。
【讨论】:
只需在 .cs 页面加载中输入以下两行
textbox1.Attributes.Remove("MaxLength");
textbox1.Attributes.Add("MaxLength", "30");
希望它会有所帮助!
【讨论】:
将 MaxLength 属性设置为字符数。
【讨论】:
您正在寻找 MaxLength:看here
【讨论】:
您是否尝试过在 TextBox 上设置 MaxLength 属性?为Reference
【讨论】:
为您的文本框添加 FliterTextBoxExtender 类型的扩展器
应该是这样的
<asp:TextBox ID="TxtCellular" runat="server"></asp:TextBox>
<asp:FilteredTextBoxExtender ID="TxtCellular_FilteredTextBoxExtender"
runat="server" Enabled="True" TargetControlID="TxtCellular" FilterType="Numbers">
</asp:FilteredTextBoxExtender>
【讨论】:
请务必注意,单独使用 MaxLength(无需添加其他属性,就像其他答案一样)仅适用于 .NET Framework 4.5 及更高版本中的项目。
我使用的是 4.5,它适用于我的项目
<asp:TextBox ID="txtSample" MaxLength="3" runat="server"/>
【讨论】:
在 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
【讨论】:
<asp:TextBox ID="txtBodySMS" runat="server" Rows="10" MaxLength="220"
TextMode="MultiLine" Width="100%">
</asp:TextBox>
【讨论】: