Reputation: 29543
<asp:TextBox ID="txtBodySMS" runat="server" Rows="10"
TextMode="MultiLine" Width="100%"></asp:TextBox>
This is my text box. How do I limit the number of characters a user can type inside it?
Upvotes: 26
Views: 121102
Reputation: 11
<asp:TextBox ID="txtBodySMS" runat="server" Rows="10" MaxLength="220"
TextMode="MultiLine" Width="100%">
</asp:TextBox>
Upvotes: 1
Reputation: 915
It seems to be a curious oversight in the design of ASP.NET (leaving aside the anomaly with textareas) that you can set the MaxLength property of a textbox but there seems to be no way provided to enforce this limit server-side without explicitly adding a validator. That's a nuisance if you have lots of fields and just want to be sure that no-one is subventing the limits of the form by injecting their own POST data. So I wrote this, which seems to do the trick - obviously you might not want to force 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
Upvotes: 0
Reputation: 4951
MaxLength
does not apply to ASP.NET to Textboxes with TextMode="MultiLine"
. An easy way to do this and keep your MultiLine
mark up would be to add:
onkeypress="return this.value.length<=10"
with 10 being the limit. Like so:
<asp:TextBox ID="txtBodySMS" runat="server" Rows="10" onkeypress="return this.value.length<=10" TextMode="MultiLine" Width="100%"></asp:TextBox>
EDIT Option One (Server side) The above example has some issues pointed out over the years. The underlying problem is a multi-line textBox
is rendered as a text-area and MaxLength
is removed. We can also fix in the C# or VB asp.net code behind of the page by forcing the re-attachment of MaxLength
instead of attaching onkeypress
.
protected void Page_Load(object sender, EventArgs e)
{
txtBodySMS.Attributes.Add("maxlength", "10");
}
EDIT Option Two (Client side): Here's a simple jquery solution. Include the following script in your head instead of attaching onkeypress
or editing the server side code.
$(document).ready(function () {
$(".MultiLineLimit").on('change keydown paste input', function () {
this.value = (this.value.length <= 10 ? this.value : this.value.substring(0, 10));
});
});
Now just add the MultiLineLimit
class to any of your <asp:TextBox>
textbox of TextMode="MultiLine"
.
<asp:TextBox ID="txtBodySMS" CssClass="MultiLineLimit" runat="server" Rows="10" TextMode="MultiLine" Width="100%"></asp:TextBox>
Remember in either scenario client side validation can be removed. If your storing this in a database it should always be validated server side as well.
Upvotes: 30
Reputation: 29543
This did it for me. I did not keep the MultiLine property.
<asp:TextBox ID="txtBodySMS" runat="server" Rows="10" MaxLength="2" Width="100%"></asp:TextBox>
Upvotes: 19
Reputation: 31
Just type below two line in .cs page load
textbox1.Attributes.Remove("MaxLength");
textbox1.Attributes.Add("MaxLength", "30");
Hope it will help !
Upvotes: 2
Reputation: 337
It is important to note that using MaxLength
alone (with no other properties to add, just like the other answers) works ONLY for projects in .NET Framework 4.5 and above.
I'm using 4.5, and it worked for my project
<asp:TextBox ID="txtSample" MaxLength="3" runat="server"/>
TextBox.MaxLength Property (MSDN Documentation)
Upvotes: 0
Reputation: 52366
Maximum character length Validation (Maximum 8 characters allowed)
<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>
Minimum character length Validation (Minimum 8 characters required)
<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>
Minimum and Maximum character length Validation (Minimum 5 and Maximum 8 characters required)
<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>
Upvotes: 14
Reputation: 1
Add an extender of type FliterTextBoxExtender for your text box
it should appear like that
<asp:TextBox ID="TxtCellular" runat="server"></asp:TextBox>
<asp:FilteredTextBoxExtender ID="TxtCellular_FilteredTextBoxExtender"
runat="server" Enabled="True" TargetControlID="TxtCellular" FilterType="Numbers">
</asp:FilteredTextBoxExtender>
Upvotes: 0
Reputation: 1885
Have you tried setting the MaxLength Property on the TextBox? for Reference
Upvotes: 0
Reputation: 2922
AFAIK maxlength has never worked in conjunction with the "multiline" mode. Therefore I would suggest some client-side js/jquery and server-side to get around the problem.
Upvotes: 4
Reputation: 13756
MaxLength="Int32"
<asp:TextBox ID="txtBodySMS" runat="server" Rows="10" MaxLength="220"
TextMode="MultiLine" Width="100%"></asp:TextBox>
Upvotes: 12