7

Estoy intentando escribir un auto-scaffolder para las vistas de índice. Me gustaría poder pasar una colección de modelos o modelos de vista (por ejemplo, IEnumerable<MyViewModel>) y obtener una tabla HTML que utiliza el atributo DisplayName para los títulos (th elementos) y Html.Display(propertyName) para las células (elementos td) . Cada fila debe corresponder a un elemento de la colección.ASP.NET MVC: Acceso ModelMetadata para los elementos de una colección

Cuando solo estoy mostrando un registro único, como en una vista de Detalles, uso ViewData.ModelMetadata.Properties para obtener la lista de propiedades para un modelo determinado. Pero qué sucede cuando el modelo que pase a la vista es una colección de modelo o vista-modelo objetos y no un modelo o el propio punto de vista-modelo?

¿Cómo se obtiene la ModelMetadata para un elemento particular en una colección?

Respuesta

6

Un método simple extensión podría hacer el trabajo:

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

Y en su opinión:

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

Eso es lo que necesitaba, gracias! – devuxer

Cuestiones relacionadas