Bindungskonflikt zwischen einer Eigenschaft namens Titel in meinem Modell und View.Title in meiner Ansicht (in MVC)

8

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 :

%Vor%     
Frank van Eykelen 07.12.2010, 09:55
quelle

4 Antworten

2

Ich würde empfehlen, EditorFor anstelle von Editor zu verwenden.

%Vor%

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).

    
Darin Dimitrov 23.01.2011 13:50
quelle
1

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:

%Vor%

Hier sind die Erweiterungsmethoden:

%Vor%     
Sam 09.07.2014 05:38
quelle
-1

Ich habe selbst eine Teillösung gefunden.

Verwenden Sie einfach:

%Vor%

anstelle von:

%Vor%

Html.EditorForModel () -Methode gibt die gleichen Ergebnisse zurück, aber ohne beschriebenes Problem.

    
gimalay 23.01.2011 16:27
quelle
-1

Ich löse das gleiche Problem. Verwenden Sie stattdessen diese Syntax Html.Editor

%Vor%     
Kuvalda.Spb.Ru 16.08.2011 19:26
quelle

Tags und Links