web-dev-qa-db-fra.com

Comment définir maxlength pour une TextBox multiligne?

Lors de l'utilisation d'un MultiLine TextBox (qui génère un TextArea), la définition de la propriété MaxLength n'a aucun effet. Quelle est la meilleure solution de contournement? J'aimerais obtenir les fonctionnalités de base prévues avec un minimum de javascript, etc., juste moche. Empêchez simplement l'utilisateur de saisir plus que le nombre maximal de caractères.

10
Timur Sadykov

Si vous souhaitez indiquer à l'utilisateur s'il a dépassé le nombre de caractères qu'il écrit, vous pouvez utiliser une fonction javascript associée à l'événement de frappe. Cette fonction testera la longueur de l'entrée et annulera le rendu du caractère si la longueur maximale est atteinte.

Une autre option consiste à utiliser le contrôle RegularExpressionValidator pour valider l'entrée lors de l'envoi.

À mon avis, la première option est beaucoup mieux.

Je n’ajoute aucun code, car Google regorge d’exemples pour tous les goûts. C’est une tâche très courante.

Ici vous avez un exemple de recherche qui pourrait vous aider.

5
Claudio Redi

Si vous ne vous souciez pas des anciens navigateurs (voir navigateurs supportés ici ),
vous pouvez régler MaxLength normalement comme ceci

<asp:TextBox ID="txt1" runat="server" TextMode="MultiLine" MaxLength="100" />

et le forcer à être imprimé au format HTML

protected void Page_Load(object sender, EventArgs e)
{
  if (!IsPostBack)
    txt1.Attributes.Add("maxlength", txt1.MaxLength.ToString());
}
21
Aximili

Hey pukipuki vous pouvez faire comme suit:

<asp:TextBox ID="txtValue" runat="server"TextMode="MultiLine" Rows="10"Columns="50"></asp:TextBox>

 $(document).ready(function(){ 
 var MaxLength = 250; 
 $('#txtValue').keypress(function(e) 
 { 
     if ($(this).val().length >= MaxLength)
 {    
    e.preventDefault();
 }  
 });});

Vous pouvez voir plus dans ce lien suivant: http://jquerybyexample.blogspot.in/2010/10/set-max-length-for-aspnet-multiline.html

5
ankit rajput

Voici une solution multi-navigateur:

<asp:TextBox TextMode="MultiLine" runat="server" ID="txtPurpose" Columns="50" Rows="2" onkeypress="return isokmaxlength(event,this,255);" ClientIDMode="static"></asp:TextBox>

Javascript: 

function isokmaxlength(e,val,maxlengt) {
    var charCode = (typeof e.which == "number") ? e.which : e.keyCode

    if (!(charCode == 44 || charCode == 46 || charCode == 0 || charCode == 8 || (val.value.length < maxlengt))) {
        return false;
    }
}

Vous devez penser à copier et coller. C'est un peu délicat, je le désactive simplement avec Jquery. Mais vous pouvez créer votre propre fonction pour effectuer une vérification plus complexe. Mais dans mon cas, copier et coller n'est pas autorisé.

Jquery pour désactiver le copier/coller: 

jQuery(function ($) {

    $("#txtPurpose").bind({
        paste: function (e) {
            e.preventDefault();
        }
    });

}); 
3
Vinc 웃

Si vous utilisez une liaison d'objet de modèle à cette zone de texte, vous pouvez utiliser les attributs DataAnnotations pour définir la longueur maximale de cette propriété. Je suis basé sur MVC à ce sujet, mais cela devrait également fonctionner pour ASP.NET!

De cette façon, vous ne jouez pas avec du Javascript ou ne définissez rien dans le balisage.

1
George Taskos

Essaye ça..

    Dim script As String = ""

    script = script + " <script type='text/javascript'> function CheckLength(obj) {"
    script = script + "  var object = document.getElementById(obj);"
    script = script + " if (object.value.length > 5) {"
    script = script + "     object.focus();"
    script = script + "      object.value = object.value.substring(0, 5); "
    script = script + "      object.scrollTop = object.scrollHeight; "
    script = script + "      return false;"
    script = script + "   }"
    script = script + "   return true;"
    script = script + "   }</script>"


    Dim b As New TextBox()
    b.ID = "btnSomeButton"
    b.TextMode = TextBoxMode.MultiLine
    Mypanel.Controls.Add(b)
    b.Attributes.Add("onkeyup", "return CheckLength('" & b.ClientID & "');")

    Page.ClientScript.RegisterStartupScript(Page.GetType(), "key", script, False)
0
Yash

Pour forcer asp.net à envoyer l'attribut maxlength pour toutes les zones de texte multilignes d'une page ou de tout un site, S'appuie sur la réponse ci-dessus d'Aximili: 

  1. Créez une fonction pour obtenir tous les contrôles de la page:

J'utilise la méthode d'extension de contrôle de David Findley https://weblogs.asp.net/dfindley/linq-the-uber-findcontrol Et référencée dans ce SO post Parcourez tous les contrôles de la page Web asp.net

namespace xyz.Extensions
{
    public static class PageExtensions
    {
        public static IEnumerable<Control> All(this ControlCollection controls)
        {
            foreach (Control control in controls)
            {
                foreach (Control grandChild in control.Controls.All())
                    yield return grandChild;

                yield return control;
            }
        }
    }
}
  1. Dans la page ou la maquette

Assurez-vous de référencer l'espace de noms pour la méthode d'extension à l'étape 1.

Placez le code suivant dans la fonction Page_Load:

if (!IsPostBack){
    //force textareas to display maxlength attribute 
    Page.Controls.All().OfType<TextBox>().ToList()
                    .Where(x => x.TextMode == TextBoxMode.MultiLine && x.MaxLength > 0)
                    .ToList().ForEach(t => t.Attributes.Add("maxlength", t.MaxLength.ToString()));
            }
0
Jim B