7
votes

Attribut majuscule qui convertit l'entrée en majuscule

Je travaille dans MVC4 et je veux définir un modèle à l'aide d'un attribut majuscule code>. L'idée serait que la présence de l'attribut majuscule entraînerait la convertie de la valeur du modèle en majuscule lorsqu'elle est arrivée sur le serveur.

Pour le moment, j'ai le code suivant dans le modèle: P>

    [Required]
    [Display(Name="Account Code")]
    [StringValidation(RegExValidation.AccountCode)]
    [Uppercase]
    public string Account { get; set; }


0 commentaires

4 Réponses :


0
votes

Vous avez raison, validationAttribute n'est pas le bon ajustement. On dirait que cela aura lieu à la phase de liaison du modèle serait une meilleure idée. Voir Cet article pour une explication détaillée de la façon de personnaliser ce comportement. < p> Sur la base des informations fournies là-bas, je pense que vous devriez pouvoir créer un attribut basé sur Customotomadelbinderattribute comme ceci: xxx

Je n'ai pas testé cela. Laissez-moi savoir si cela fonctionne ou non.


2 commentaires

Merci Daniel, malheureusement, le défautModelbinder ne peut pas être affecté à des propriétés. AttributeUSAGeTribute (AttributeTaregets.class | attributetarg ets.struct | Attribute Targets.enum | Attribut TetaRgets.interface | AttributetaRgets.par Amereter


Ensuite, nous devrons aller un niveau supérieur. Nous devons changer le classeur de modèle pour les classes contenant ces chaînes, modifier la barreaucaseTribute en un simple attribut de marquage et indiquez au classeur de modèle de rechercher cet attribut et de traiter ces chaînes différemment.



5
votes

J'ai réussi à faire fonctionner cela, à un point, voici ma solution pour que d'autres d'apprécier.

Une fois à noter que la solution complète n'a pas pu être atteinte parce que je ne pouvais pas obtenir le Modelmetadata à l'intérieur du stringvalidation.isvalid () attribut. Le problème particulier que j'avais ici était que je pouvais obtenir les métadonnées, mais je n'ai pas pu obtenir le nom de propriété à partir de celui-ci, seul le displayName . Il y avait plusieurs options là-bas, mais le fait que certaines de mes propriétés ont le même displayName signifie que je ne pouvais pas être sûr que le proprtyname était celui que j'étais réellement Validation.

Voici le code pour le validationAttribute : xxx

i a créé un nouveau imodelbinder Mise en œuvre: xxx

et enregistré qui dans mon global.asax fichier: xxx

Le code jusqu'à présent entraînera une entrée de chaîne en MVC à être convertie en majuscule s'il a stringvalidationattribute attaché à celui-ci sur le modèle et où l'indicateur majuscule a été défini.

Ensuite, pour réaliser mon désir de faire des formulaires HTML en majuscule aussi, j'ai implémenté un nouveau EditTorteTemplate nommé string.cshtml . Dans cette vue, j'ai ajouté: xxx

avec le CSS comme; xxx

espère que cet article aide quelques autres là-bas.


4 commentaires

Bonjour, cela s'applique-t-il à MVC 4? parce que je reçois l'erreur suivante. 'UpperCasevalidationAttribute' NE MONTRAIMENT PAS MEMBRE MEMBRE D'INTERFACE 'SYSTÈME.WEB.MVC.ICLIENTVALIDABLE.GETCLIGEVALIDATIONSRULES (SYSTEM.WEB.MVC.MODEL METADATA, SYSTÈME.WEB.MVC.CONTROLLERCONTEXT)' Pourriez-vous s'il vous plaît aider? Merci!!


Oui cela fonctionne dans mvc4. Vous devez ajouter une substitution pour Public Ienumerable GetCliverValidationRules (Modelmetadata Metadata, ControlContext Contexte) . C'était le peu dans le ... dans la réponse :)


Cela stocke-t-il du texte dans la base de données de la forme de capital? @Pseudo


En ce qui concerne le contrôleur le sait, le texte est toujours présenté en majuscule. En supposant que vous passez directement sur la base de données, alors oui, il frapperait la DB en majuscule.



0
votes

note: strong> J'ajoute à ce post parce que jusqu'à ce que j'ai découverte l'approche que j'utilise maintenant, j'ai lu ceci et essayé tout ce qui précument sans succès.

J'utilise généralement un processus de deux parties lors de la formulation de données de texte à former en majuscule. 1. À la vue et 2. Au contrôleur p>

  1. sur la couche de vue afin que l'utilisateur connaisse des données soit utilisée dans la forme majuscule. Cela peut être en panne via les HTMLATtributs utilisés dans l'éditeur pour l'aide HTML. P>

    public ActionResult verify(int? id)
          {
            var userData = db.user.Where (i=> i.userID == id).Single();
    
            userData.Access_Code = userData.Access_Code.ToUpper();
    
       ...
     }
    


0 commentaires

3
votes

Pour l'API Web Objectif Il est préférable de convertir le JSON entrant en majuscules ou en minuscule.

  protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        //.......... others



        JsonMediaTypeFormatter jsonFormatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
        JsonSerializerSettings jSettings = new Newtonsoft.Json.JsonSerializerSettings();
        jSettings.Converters.Add(new UpperCaseStringConverter());
        jsonFormatter.SerializerSettings = jSettings;
    }


0 commentaires