Mein Modell enthält eine Eigenschaft namens Title
, und in meiner Create
Sicht habe ich den Seitentitel mit ViewBag.Title
festgelegt.
Dies führt zu folgendem Problem: Das von Html.Editor
generierte Formular zeigt den Text von ViewBag.Title
anstelle des Title
-Werts des Modells an.
Die einzige Problemumgehung, die ich gefunden habe, besteht darin, zuerst Html.Editor
aufzurufen und dann View.Title
zu setzen.
Hat jemand eine bessere Lösung?
Edit 1: Ich benutze MVC 3.
Bearbeiten 2: Das ist mein DisplayTemplates/Object.cshtml
:
Ich würde empfehlen, EditorFor
anstelle von Editor
zu verwenden.
anstelle von:
%Vor%Auf diese Weise nutzt die Ansicht nicht nur Ihr Ansichtsmodell, sondern verhält sich in diesem Fall wie erwartet.
Beispiel mit ASP.NET MVC 3.0 RTM (Razor):
Modell:
%Vor%Controller:
%Vor%Anzeigen:
%Vor% Also, egal wie sehr wir versuchen, hier zu missbrauchen, die Editor-Vorlage verwendet den korrekten Modelltitel (was nicht der Fall ist, wenn wir Html.Editor("Title")
verwendet haben).
Wie von den anderen Antworten vorgeschlagen, scheint die Verwendung von EditorFor
anstelle von Editor
das Problem zu umgehen. Die Verwendung von EditorFor
erfordert jedoch die Kenntnis des Modelltyps und des Eigenschaftstyps zur Kompilierzeit, was für Object.cshtml
nicht der Fall ist.
Sie können dies trotzdem tun, indem Sie die korrekte generisch konstruierte EditorFor
-Methode mithilfe von Reflection aufbauen und aufrufen. Der Code, um dies zu tun, ist wirklich chaotisch, also hier sind einige wiederverwendbare Erweiterungsmethoden, um es für Sie zu tun.
Verwenden Sie sie wie folgt in Object.cshtml
, wobei prop
eine Instanz von ModelMetadata
wie in der Frage ist:
Hier sind die Erweiterungsmethoden:
%Vor%Ich löse das gleiche Problem. Verwenden Sie stattdessen diese Syntax Html.Editor
%Vor%Tags und Links asp.net-mvc razor model conflict