He estado buscando una forma de limitar el texto dentro de un TextBox que se ve así

<asp:TextBox runat="server" ID="tbTest" TextMode="MultiLine"  
             MaxLength="20" Rows="5" Columns="30" >
</asp:TextBox>

La propiedad MaxLength="20" solo funciona si la otra propiedad TextMode="MultiLine" está no establecida. Ni siquiera está renderizado.

El resultado en el HTML se ve así:

<textarea name="ctl00$ContentPlaceHolder1$tbTest" 
          id="ctl00_ContentPlaceHolder1_tbTest" rows="5" cols="30">
</textarea>

Si busca aquí SO para encontrar una solución para resolver este problema, se le sugieren 2 formas:

  • agregue un validador (asp:RegularExpression) y valide el control
  • agregue un JavaScript que elimine el último carácter de inserción en caso de que se alcance el límite.

PERO

La mayoría de las respuestas son anteriores a 2013 y el soporte de maxlength en todos los navegadores fue de 2013 cuando se lanzó IE10 (referencia).

Actualmente, todos los navegadores admiten este atributo: pruébelo usted mismo: https://jsfiddle.net/wuu5wne1/

PREGUNTA

¿Cómo puedo obligar a ASP.Net a aplicar este atributo a mi cuadro de texto de varias líneas?

4
Toshi 16 feb. 2017 a las 09:40

3 respuestas

La mejor respuesta

Bienvenido a 2020: este finalmente funciona ahora en todos los navegadores

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        tbTest.Attributes.Add("maxlength", "20");
    }
}
2
Toshi 23 ene. 2020 a las 12:11

Mi solución a esto fue establecer manualmente la propiedad maxlength a través de jquery en document.ready:

$(document).ready(function ()
{
    $('#<%=tbTest.ClientID%>').prop('maxlength', 20);
}

Sí, es un poco raro, pero si quieres usar el control asp (no quería tener que implementar un cambio de código), funciona.

5
WearySky 3 ene. 2018 a las 17:04

En Visual Studio 2019, maxLength funcionará si agrega la propiedad de columnas

<asp:TextBox runat="server" Columns="1" MaxLength="50" class="form-control"  ID="txtFirstName" ClientIDMode="Static" required />
0
Joe Mayo 5 abr. 2020 a las 21:56