7

Sto provando a scrivere un auto-scaffolder per le viste indice. Mi piacerebbe essere in grado di passare in una raccolta di modelli o view-modelli (ad esempio, IEnumerable<MyViewModel>) e tornare una tabella HTML che utilizza l'attributo DisplayName per le intestazioni (th elementi) e Html.Display(propertyName) per le cellule (td elementi) . Ogni riga dovrebbe corrispondere a un elemento nella raccolta.ASP.NET MVC: accesso a ModelMetadata per gli articoli in una raccolta

Quando visualizzo solo un singolo record, come in una vista Dettagli, utilizzo ViewData.ModelMetadata.Properties per ottenere l'elenco di proprietà per un determinato modello. Ma cosa succede quando il modello che passo alla vista è una collezione di oggetti modello o vista-modello e non un modello o modello di vista stesso?

Come ottengo il ModelMetadata per un particolare oggetto in una collezione?

risposta

6

Un metodo di estensione semplice potrebbe fare il lavoro:

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

E secondo lei:

<%@ 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

Questo è quello che mi serviva, grazie! – devuxer

Problemi correlati