8
votes

StringLength Dans ViewModel Impossible de régler maxlength sur la zone de texte

Ici la propriété dans mon viewModel: xxx

et à mon avis: xxx

et il rend " < Pré> xxx

doit-il régler l'attribut maxlength sur ma zone de texte? Sinon, comment puis-je faire cela avec des dataattributes?


5 commentaires

Avez-vous vérifié si vous pouvez poster une chaîne de plus de 6 caractères?


Je reçois une erreur de validation, mais je veux qu'il définisse réellement l'attribut maxlength.


Si vous le modifiez à TEXTBOXUR Vous pouvez transmettre des options HTML.


Oui, mais j'aimerais que l'attribut que j'ai défini dans la fenêtre de vie puisse contrôler cela si possible.


Si vous utilisez Validation non obstrisseuse Ceci POST pourrait être utile


3 Réponses :


4
votes

J'aimerais que l'attribut que j'ai défini dans la fenêtre de vue pour contrôler cela si possible. em> p>

ASP.NET MVC fournit un système extensible pour faire exactement cela. Voici ce que vous devez faire: p>

  1. Implémentez un ModelmetadataProvider code>. Li>
  2. Recherchez le StringLengthateTtribute code> ou le maxlengthateTtribute code>, extrayez les informations et ajoutez-le au Modelmetadata ​​code>. Li>.
  3. Fournissez un modèle d'éditeur personnalisé qui utilise les informations. LI> ol>

    Étape 1: strong> Implémentez un ModelmetaDataProvider Code>. P>

    Créer une classe qui dérive à partir de ModelmetaDataProvider code> . Généralement, vous découlez du dataannotationsModelmetaDataProvider code> car cela fournit une fonctionnalité par défaut, ce qui signifie que vous devez seulement remplacer une seule méthode appelée CreateMetaData ​​code>. P>

    Étape 2: strong> extraire les informations: p>

    Pour obtenir les informations, vous devez rechercher l'attribut, extraire les informations de longueur maximale et l'ajouter au dictionnaire supplémentaire code> Dictionnaire du modelmettadata ​​code>. La mise en œuvre ressemblerait à ceci (c'est la mise en œuvre entière): p> xxx pré>

    Pour obtenir ASP.NET MVC d'utiliser ceci, vous devez l'enregistrer dans le Application_start code> méthode dans global.asax code>. P> xxx pré>

    Étape 3: strong> Créez un modèle d'éditeur personnalisé.

    Vous devez maintenant créer une vue qui utilise les informations. Créez une nouvelle vue appelée String code> dans le dossier Vues \ code>. P>

    string.cshtml strong> p> xxx pré>

    Lorsque vous exécutez votre application, vous obtiendrez la sortie HTML suivante en appelant @ html.editorfor code>. p>

    <input class="text-box single-line" id="Extension" maxlength="6" name="Extension" type="text" value="" />
    


2 commentaires

Benjamin, vous êtes une machine aujourd'hui!


Pas de problème, heureux d'avoir pu aider.



2
votes

J'ai couru dans quelque chose de similaire, voici ma solution rapide et sale:

En haut de votre fichier .cshtml Ajoutez la ligne: P>

<script>
    $(function ()
    {
        var max = $("#myinput").attr("data-val-length-max");
        $("#myinput").attr("maxlength", max);
    });
</script>


1 commentaires

Ce code fonctionne, mais vous voudrez peut-être garder votre rasoir Vues Nettoyant en utilisant quelque chose comme une aide. Voir ma réponse pour un exemple de cela.



4
votes

Essentiellement basé sur la réponse de Brad, enveloppé dans une extension de l'aide HTML à l'aide de la syntaxe de Lambda afin de ne pas polluer vos vues de rasoir avec des trucs de réflexion:

@using HtmlHelper


0 commentaires