ASP.NET MVC: доступ к ModelMetadata для элементов в коллекции - PullRequest
7 голосов
/ 14 марта 2010

Я пытаюсь написать авто-леса для индексных представлений. Я хотел бы иметь возможность передать коллекцию моделей или моделей представления (например, IEnumerable<MyViewModel>) и получить обратно таблицу HTML, которая использует атрибут DisplayName для заголовков (th элементы) и Html.Display(propertyName) для клеток (td элементов). Каждый ряд должен соответствовать одному предмету в коллекции.

Когда я отображаю только одну запись, как в представлении Details, я использую ViewData.ModelMetadata.Properties, чтобы получить список свойств для данной модели. Но что происходит, когда модель, которую я передаю представлению, является коллекцией объектов модели или модели представления, а не самой моделью или моделью представления?

Как получить ModelMetadata для определенного элемента в коллекции?

1 Ответ

6 голосов
/ 14 марта 2010

Простой метод расширения может сделать работу:

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) %>
...