Я пытаюсь записать авторабочему на лесах для Индексных представлений. Я хотел бы смочь передать в наборе моделей или моделей представления (например, IEnumerable<MyViewModel>
) и возвратите HTML-таблицу, которая использует DisplayName
атрибут для заголовков (th
элементы) и Html.Display(propertyName)
для ячеек (td
элементы). Каждая строка должна соответствовать одному объекту в наборе.
Когда я только отображаю единственную запись, как в представлении Details, я использую ViewData.ModelMetadata.Properties
получить список свойств для данной модели. Но что происходит, когда модель, которую я передаю представлению, является набором образцовых или объектов модели представления и не модели или самой модели представления?
Как я получаю ModelMetadata для конкретного объекта в наборе?
Простой метод расширения может сработать:
public static class MyExtensions
{
public static ModelMetadata GetMetadata<TModel>(this TModel model)
{
return ModelMetadataProviders.Current.GetMetadataForType(null, typeof(TModel));
}
}
И, по вашему мнению:
<%@ 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) %>