Frage

Ich versuche, einen Auto-scaffolder für Index Ansichten zu schreiben. Ich möchte in einer Sammlung von Modellen oder View-Modellen (zB IEnumerable<MyViewModel>) und eine HTML-Tabelle zurück zu übergeben können, die das DisplayName Attribut für die Überschriften (th Elemente) und Html.Display(propertyName) für die Zellen (td Elemente) verwendet . Jede Zeile soll in der Sammlung zu einem Punkt entsprechen.

Wenn ich nur einen einzelnen Datensatz, wie es in einer Detailansicht angezeigt wird, verwende ich ViewData.ModelMetadata.Properties die Liste der Eigenschaften für ein bestimmtes Modell zu erhalten. Aber was passiert, wenn das Modell, das ich zu der Ansicht, passiere eine Sammlung von Modell oder View-Modell-Objekten und nicht ein Modell oder View-Modell selbst?

Wie erhalte ich die ModelMetadata für ein bestimmtes Element in einer Sammlung?

War es hilfreich?

Lösung

Eine einfache Erweiterung Methode könnte die Arbeit tun:

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

Und in der Ansicht:

<%@ 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) %>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top