2 votes

Comment puis-je créer un ViewModel commun avec un fichier de ressources variable ?

J'ai un ViewModel comme ceci :

public class MyViewModel
{   
   [Display(Name = "One_Name", ResourceType = typeof(Resources.User.Resource1))]
   public string One { get; set; }

   [Display(Name = "Two_Name", ResourceType = typeof(Resources.User.Resource1))]
   public string Two { get; set; }
}

Qui est utilisé sur page 1 et fonctionne très bien (par exemple en récupérant la ressource) lorsque je fais ce genre de choses :

@Html.LabelFor(model => model.One)

Mais je veux aussi utiliser ce ViewModel sur page 2 mais je ne veux pas faire pointer les propriétés vers un fichier de ressources différent (par ex. Resources.User.Resource2 ).

Je ne veux pas avoir à dupliquer la classe, mais je serais ouvert à une astuce OO.

Le problème est que les arguments des attributs doivent être des chaînes de caractères, des constantes, typeof ou des expressions de tableau.

Quelle est la meilleure façon de résoudre ce problème ?

0voto

Clafou Points 7257

Oui, il semble bien que MVC ne supporte pas un tel scénario. Vous pouvez fournir votre propre classe ResourceType mais elle doit avoir des propriétés statiques (telles que public static string One_Name y public static string Two_Name dans votre exemple) qui renvoient les chaînes d'affichage, et il n'y a pas de moyen élégant de lui faire faire ce que vous voulez.

Mais comme Html.LabelFor ne fait rien de particulièrement bouleversant, vous pourriez facilement vous en passer dans une vue. Écrivez simplement votre propre <label> et obtenir directement la chaîne localisée, ce qui est aussi simple que d'appeler ResourceManager.GetString . Vous pouvez toujours utiliser Html.LabelFor dans la plupart des cas et n'écrivez vos propres étiquettes que dans les cas (heureusement rares) où une vue donnée doit faire varier le texte affiché.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X