So wie ich es verstehe
Gegeben ein Ansichtsmodell
%Vor%.. a Views \ MyController \ MyAction.cshtml
%Vor%.. eine partielle View Views \ Shared \ DisplayTemplates \ DateTime.chstml
%Vor%.. eine weitere Teilansicht Views \ Shared \ DisplayTemplates \ MyClass.cshtml
%Vor%.. Ich sollte
bekommen %Vor%.. Aber ich bekomme
%Vor%So scheint es, dass DisplayForModel die DateTime-Vorlage, aber nicht meine benutzerdefinierte Vorlage findet, obwohl ich die Konventionen der Benennung nach dem Typ der Eigenschaft befolge.
Vermisse ich etwas. Ich benutze MVC 3 und glaube, dass diese Funktion bereits in MVC 2 verfügbar war
Nachdem der MVC-Quellcode gelesen wurde, stellt sich heraus, dass dies tatsächlich nicht möglich ist.
Der Grund dafür ist, dass @Html.DisplayForModel()
versucht, eine Vorlage zu finden, die für das Rendering verwendet werden kann:
MyViewModel.cshtml
oder MyViewModel.vbhtml
oder MyViewModel.ascx
usw., in der Position ~\Views
, ~\Views[ControllerName]
, ~\Views\DisplayTemplates
, ~\Views\Shared
, ~\Views\Shared\DisplayTemplates
Object
enden, für das es eine integrierte Vorlage Die Objektvorlage ist so konzipiert, dass sie alle Eigenschaften des Modells zum Rendern aus Metadaten basierend auf der folgenden Bedingung abruft:
%Vor%Daher wird jede Eigenschaft, die ein komplexer Typ ist, immer ausgeschlossen. Ich denke, die Verwirrung ergibt sich aus Brad Wilson's posten auf benutzerdefinierte Objektvorlage , wo er eine benutzerdefinierte Objektvorlage erstellt und das Problem von Shallow Dive vs Deep Dive behandelt. Durch das Implementieren einer benutzerdefinierten Tiefenobjektvorlage wird die integrierte Objektvorlage überschrieben und komplexe Typen können gerendert werden.
Tags und Links asp.net-mvc asp.net-mvc-3 templates