Umgang mit MVC DisplayTemplates für zwei Klassen mit demselben Namen (verschiedene Namespaces)

9

Sie können nur eine Ansicht pro Klassennamen im Ordner DisplayTemplates haben, da der Klassenname als Name der Datei view.cshtml verwendet wird.

Sie können jedoch zwei Klassen in einer Lösung mit demselben Namen haben, wenn sie in verschiedenen Namespaces angezeigt werden:

%Vor%

Beide versuchen, die von view definierte Anzeigevorlage zu verwenden:

%Vor%

In der View-Datei müssen Sie jedoch das Modell deklarieren - zum Beispiel:

%Vor%

Das heißt, wenn Sie eine DisplayFor haben, die eine MyOtherNamespace.Class1 akzeptiert, erhalten Sie einen Laufzeitfehler aufgrund eines Typenkonflikts.

Wenn Sie im Voraus wüssten, wo das passieren würde, könnten Sie die UIHint verwenden, um DisplayFor zu zwingen, eine alternative Vorlage zu verwenden (oder Sie könnten eine benannte Vorlage direkt in der Ansicht verwenden). Aber wenn Sie nicht im Voraus wissen (Sie haben all diese Objekte in einer Aufzählung irgendeiner Art und können daher keinen spezifischen Code schreiben, um Kantenfälle wie diese ohne viel sperriges Nachdenken zu behandeln) Gibt es eine Möglichkeit, DisplayTemplates für diese Klassen zu haben?

    
Kaine 15.08.2017, 15:02
quelle

1 Antwort

2

Ich habe so etwas noch nie versucht, aber es sollte funktionieren. Sie können festlegen, dass die Ansicht einen generischen Modelltyp wie object akzeptiert, und dann versuchen, sie in den entsprechenden Typ zu konvertieren:

%Vor%

AKTUALISIEREN

Wenn ich noch einmal darauf schaue, stört mich die Verzweigung in dieser Vorlage. Das ist unvermeidlich, aber eine etwas bessere Lösung könnte etwa so aussehen:

%Vor%

Erstellen Sie dann einfach diese zusätzlichen Ansichten. Auf diese Weise wird Ihr Code immer noch sauber in bestimmte Ansichten aufgeteilt, die die entsprechende Modelldeklaration haben können. Diese Ansicht wird im Grunde nur zu einem Proxy, der zum richtigen führt.

    
Chris Pratt 15.08.2017, 19:10
quelle

Tags und Links