ASP.NET MVC: Acessando ModelMetadata para itens em uma coleção
-
19-09-2019 - |
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?
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) %>