Question

J'ai un très simple vue-modèle dans une dll que je veux garder séparé du principal projet mvc web.

Je suis la décoration des modèles avec des métadonnées attributs qui vous aideront l'affichage ui la présentation correcte (DisplayName, UIHint, DataType, ReadOnly etc) et je voudrais réutiliser ces informations avec des couches de présentation différents plus tard (comme Silverlight)

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

Y at-il une raison particulière de ne pas avoir inclus que les autres attributs?

J'ai essayé de remplacer le comportement par défaut de mettre un HiddenInput.ascx dans le dossier editortemplates mais je reçois toujours l'étiquette pour le champ quand je l'appelle un html.EditorfForModel () à mon avis.

Était-ce utile?

La solution

Je crois que la raison pour ne pas être inclus dans le System.ComponentModel.DataAnnotations est parce que c'est une partie de l'assemblage de la BCL et existait avant ASP.NET MVC. Brad Wilson a écrit un beau billet de blog couvrant les métadonnées de modèle MVC que vous pouvez lire.

Ceci étant dit, vous pouvez utiliser le [UIHint] attribut comme ceci:

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

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

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

Vous pouvez maintenant utiliser <%= Html.EditorForModel() %> dans votre vue et il choisira le modèle personnalisé.

Bien sûr, utiliser [HiddenInput] est préféré car il vous fait écrire moins de code, mais si vous ne voulez pas System.Web.Mvc de référence dans votre projet, vous avez toujours la solution de UIHint ..

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top