MVC 3 Benutzerdefinierte Vorlagen und EditorForModel Verwirrung

8

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

    
ricardo 02.06.2011, 13:37
quelle

1 Antwort

5

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:

  • zuerst nach dem Namen des Modelltyps suchen, d. h. MyViewModel.cshtml oder MyViewModel.vbhtml oder MyViewModel.ascx usw., in der Position ~\Views , ~\Views[ControllerName] , ~\Views\DisplayTemplates , ~\Views\Shared , ~\Views\Shared\DisplayTemplates
  • Wenn es nicht gefunden wird, wird es die Basistypen des Modells durchlaufen und den Namen jedes Typs nacheinander versuchen
  • Wenn keine gefunden wird, wird es schließlich bei Object enden, für das es eine integrierte Vorlage
  • gibt

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.

    
ricardo 01.07.2011, 09:07
quelle