2010-10-13 5 views
4

J'ai un très simple view-model dans une DLL que je veux garder séparé du projet web principal mvc.Asp.Net MVC ModedMetadata question pour HiddenInput

Je décorais le modèle avec des attributs de métadonnées qui aideront l'interface afficher la présentation correcte (DisplayName, UIHint, DataType, ReadOnly etc) et je voudrais réutiliser ces informations avec différentes couches de présentation plus tard (comme Silverlight)

La plupart des attributs proviennent de l'espace de noms System.ComponentModel.DataAnnotations mais j'ai été surpris de découvrir que HiddenInput est une exception à cela et je dois ajouter une référence à System.Web.Mvc dans mon modèle de vue dll.

Y a-t-il une raison particulière pour ne pas l'avoir incluse avec les autres attributs?

J'ai essayé de remplacer le comportement par défaut en plaçant un HiddenInput.ascx dans le dossier editortemplates mais je reçois toujours l'étiquette pour le champ lorsque j'appelle un html.EditorfForModel() dans ma vue.

Répondre

3

Je crois que la raison de ne pas être inclus dans le System.ComponentModel.DataAnnotations est que cet assembly fait partie de la BCL et existait avant ASP.NET MVC. Brad Wilson a écrit un joli blog post couvrant les métadonnées du modèle dans MVC que vous pourriez lire.

Cela dit, vous pouvez utiliser l'attribut [UIHint] comme ceci:

public class MyViewModel 
{ 
    [UIHint("Hidden")] 
    public string Value { get; set; } 
} 

Et ~/Views/Home/EditorTemplates/Hidden.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %> 
<%: Html.HiddenFor(x => x) %> 

Maintenant, vous pouvez utiliser <%= Html.EditorForModel() %> dans votre vue et il va choisir le modèle personnalisé.

Bien sûr, utiliser [HiddenInput] est préféré car il vous permet d'écrire moins de code, mais dans le cas où vous ne voulez pas faire référence System.Web.Mvc dans votre projet, vous avez toujours la solution UIHint ..

+1

Je knw la question est vieille mais je suis confronté au même problème. J'utilise [UIHint ("Caché")] mais il affiche toujours l'étiquette. qu'est-ce que je fais mal ici? – mmssaann