7
votes

MPC3 Modèles d'affichage

J'ai créé des modèles d'éditeur personnalisés et des modèles d'affichage. J'ai placé chacun de ces types dans un dossier de mon dossier de vues. Les dossiers ont été nommés que l'EditTortemplate ou DisplayTemplate, en fonction duquel le type de modèle a été créé.

Donc, maintenant, je peux utiliser Editeur pour utiliser mon modèle d'éditeur personnalisé ou afficher pour mon modèle d'éditeur personnalisé.

Je souhaite créer un modèle personnalisé pour une Labelfor, mais je n'ai pas trouvé d'exemple de cela. Voulez-moi créer un dossier nommé Labeltemplate dans mon dossier Views et l'ajouter ici?

La raison pour laquelle j'essayais d'étendre labelfor était de gérer une propriété qui est de type keyvaluepair. Je souhaite utiliser la clé de cette propriété comme étiquette, ainsi que la valeur que l'affichage. J'ai posé une question ici sur l'affichage pour gérer la valeur.

Ma solution s'est terminée par> xxx

merci,


0 commentaires

3 Réponses :


6
votes

Labelfor n'utilise aucun modèle. Il est codé en couleur dans le code source MVC et cela crache un

Vous devrez écrire une aide HTML personnalisée si vous souhaitez modifier ce comportement.

D'autre part Si vous souhaitez utiliser des modèles, vous devez utiliser Editeur / Displayfor Aidateurs. Donc, étant donné qu'une étiquette est à l'affichage des objectifs, vous pouvez utiliser un modèle d'affichage et plutôt que d'utiliser html.labelfor (x => x.foo) utiliser html.displayfor (x => x. Foo) . En ce qui concerne le modèle personnalisé, vous décorez la propriété FOO avec l'attribut [uihint] ou transmettez-le comme deuxième argument à l'affichage > Helper.


mise à jour:

Selon votre commentaire, vous n'essayez pas de modifier le balisage, mais seulement la valeur. C'est ce que le deuxième argument de l'assistant de Labelfor pourrait être utilisé pour: xxx

ceci crée une étiquette associée à l'entrée FOO ( pour attribut de l'étiquette correctement assignée) mais le texte affiché est celui de la propriété sur votre modèle de vue.


6 commentaires

Je vais bien avec l'étiquette, mais je voudrais définir le texte interne de l'étiquette sur une valeur autre que ce que l'assistant utilise. Ma propriété est un keyvaluepair et je voudrais définir l'étiquette sur la "touche" de la propriété. Des pensées?


Veillez à utiliser "Displayfor". Votre solution fonctionnerait mais l'affichage était destiné à être utilisé pour créer un «lecture en lecture seule» d'une valeur et non pour créer une étiquette pour la propriété. Par cela, je veux dire un affichage pour "DateTime" serait utilisé pour personnaliser quel format le temps de données a été affiché. Un modèle "Displayfor" pour votre modèle ou votre classe personnalisés produirait des valeurs.


Peut-être que je vais juste du mal à coder l'étiquette et ne pas utiliser un assistant du tout.


@Jeffreddy, c'est ce que le deuxième argument de l'assistant Labelfor pourrait être utilisé pour: @ html.labelfor (x => x.foo, modèle.key) . Cela générera une étiquette pour l'entrée FOO, mais la valeur utilisée sera celle de la propriété clé sur votre modèle de vue.


Stackoverflow.com/Questtions/8419484/...


@ Splash-X Cette question concernait la partie "valeur" de la propriété KeyValuePair. Qui est montré à l'aide de mon affichage. J'essaie maintenant de créer une étiquette à l'aide de Labelfor qui affichera la "touche" de My KeyValuePair Property



2
votes

Il n'y a pas de support à la création d'un modèle pour une méthode d'assistance HTML spécifique (Labelfor).

Vous pouvez: P>

Marquez votre modèle à l'aide de la méta descripteurs pour modifier quelle valeur est affichée dans le cadre duquel Étiquette: P>

 [DisplayName("Custom Label")]
 public string Test {get;set;}


3 commentaires

J'ai essayé la solution offerte dans cette question, mais j'avais besoin de la valeur «clé» de ma propriété KeyvaluePair. Sa question portait sur la mise en forme de l'étiquette (ajout d'une balise d'enveloppe).


Le code de ce message n'était pas une "solution finale" pour vous, ce n'était pas méchant de vous donner le code de base pour créer un assistant HTML qui pourrait faire ce que vous vouliez.


Cela m'a donné les bases, mais il manquait un élément clé, la valeur de la propriété. Il semblait que le code n'a travaillé que avec des métadonnées de la propriété, mais pas la valeur. C'était tout ce dont j'ai vraiment besoin, mais je ne savais pas si c'était disponible.



1
votes

Vous pouvez créer un plafondTemplate et l'accéder via Nom du modèle: xxx

, puis créer un modèle appelé label.cshtml dans votre dossier DisplayTemplates.

pour simplifier Cet appel, vous pouvez écrire une méthode d'extension qui gère cet appel: xxx


0 commentaires