7

Próbuję napisać automatyczne rusztowanie dla widoków indeksu. Chciałbym móc przekazać kolekcję modeli lub modeli widoku (np. IEnumerable<MyViewModel>) i odzyskać tabelę HTML, która używa atrybutu DisplayName dla nagłówków (elementy th) i Html.Display(propertyName) dla komórek (elementy td) . Każdy wiersz powinien odpowiadać jednej pozycji w kolekcji.ASP.NET MVC: Dostęp do ModelMetadata dla elementów w zbiorze

Gdy wyświetlam tylko jeden rekord, tak jak w widoku szczegółów, używam ViewData.ModelMetadata.Properties, aby uzyskać listę właściwości dla danego modelu. Ale co się stanie, gdy model, który przekażę do widoku, jest zbiorem modeli lub obiektów widoku, a nie modelem lub modelem widoku?

Jak uzyskać modelMetadata dla określonego przedmiotu w kolekcji?

Odpowiedz

6

Prosta metoda rozszerzenie może wykonać zadanie:

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

A w widoku:

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

To, co potrzebne, dzięki! – devuxer

Powiązane problemy