Pergunta

Eu estou tentando escrever um auto-scaffolder para vistas de Índice. Eu gostaria de ser capaz de passar em uma coleção de modelos ou ver-modelos (por exemplo, IEnumerable<MyViewModel>) e voltar uma tabela HTML que usa o atributo DisplayName para os títulos (elementos th) e Html.Display(propertyName) para as células (elementos td) . Cada linha deve corresponder a um item na coleção.

Quando eu estou apenas exibindo um único registro, como em uma exibição de detalhes, eu uso ViewData.ModelMetadata.Properties para obter a lista de propriedades para um determinado modelo. Mas o que acontece quando o modelo I passar para a vista é uma coleção de modelo ou view-modelo objetos e não um modelo ou a própria visão de modelo?

Como faço para obter o ModelMetadata para um determinado item em uma coleção?

Foi útil?

Solução

Um método simples extensão pode fazer o trabalho:

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

E na sua opinião:

<%@ 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) %>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top