7

J'essaye d'écrire un auto-échafaudage pour les vues d'index. J'aimerais pouvoir transmettre une collection de modèles ou de modèles (par exemple, IEnumerable<MyViewModel>) et récupérer un tableau HTML qui utilise l'attribut DisplayName pour les rubriques (th éléments) et Html.Display(propertyName) pour les cellules (td éléments) . Chaque ligne doit correspondre à un élément de la collection. Lorsque j'affiche un seul enregistrement, comme dans une vue Détails, j'utilise ViewData.ModelMetadata.Properties pour obtenir la liste des propriétés pour un modèle donné.ASP.NET MVC: Accès à ModelMetadata pour les éléments d'une collection

Mais que se passe-t-il lorsque le modèle que je passe à la vue est une collection d'objets de modèle ou de modèle de vue et non un modèle ou un modèle de vue lui-même?

Comment puis-je obtenir ModelMetadata pour un article particulier dans une collection?

Répondre

6

Une simple méthode d'extension peut faire le travail:

public static class MyExtensions 
{ 
    public static ModelMetadata GetMetadata<TModel>(this TModel model) 
    { 
     return ModelMetadataProviders.Current.GetMetadataForType(null, typeof(TModel)); 
    } 
} 

Et à votre avis:

<%@ Page 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewPage<System.Collections.Generic.IEnumerable<MyViewModel>>" %> 

<%-- Get metadata for the first item in the model collection --%> 
<%= Html.Encode(Model.ElementAt(0).GetMetadata().ModelType) %> 
+0

C'est ce que je avais besoin, merci! – devuxer

Questions connexes