ASP.NET MVC 3 Benutzerdefinierte Display-Vorlage mit UIHint - For-Schleife erforderlich?

8

Wenn ich ein ViewModel wie folgt habe:

%Vor%

Und eine stark typisierte Ansicht mit einer HTML-Zeile wie dieser:

%Vor%

Und eine Display-Vorlage mit einer Signatur wie dieser:

%Vor%

Ich erhalte eine Fehlermeldung, dass "das Modellelement vom Typ List<SomeViewModel> ist, aber dieses Wörterbuch ein Modell vom Typ SomeViewModel benötigt.".

Das macht Sinn, aber ich hätte gehofft, dass die integrierten Template-Smarts von MVC einspringen, sehen, dass es eine IEnumerable von etwas ist und trainieren, um meine Vorlage N viele Male aufzurufen, wie es normalerweise für Html.DisplayFor ohne den Hinweis.

Es sieht also so aus, als ob [UIHint] diese Funktionalität überschreibt?

Offensichtlich kann ich auf eine andere Vorlage zeigen, die die Sammlung akzeptiert, und ruft Html.DisplayForModel() auf, was im Grunde MVC-Smarts emuliert. Aber ich hoffe, das zu vermeiden. Ehrlich gesagt, würde ich lieber eine foreach-Schleife als diese 1 Zeile "Wrapper" Vorlage.

Irgendwelche besseren Ideen?

Es ist so, als ob ich sagen möchte: "Hey MVC, render eine Vorlage für jeden dieser Typen. Aber anstatt Namenskonvention zu verwenden, um die Vorlage zu finden, hier ist ein Hinweis".

    
RPM1984 23.05.2011, 06:47
quelle

3 Antworten

7

UIHint bedeutet "Rendern Sie dieses Modell mit der Vorlage namens XXX". Sie müssen also Ihre Anzeigevorlage "SomeTemplate" mit

deklarieren %Vor%

Und jedes Element in einer foreach anzeigen.

    
mathieu 23.05.2011, 06:53
quelle
3

Alternativ können Sie den Namen der Zeichenfolgeliste wie folgt übergeben

%Vor%     
bijayk 07.06.2013 14:23
quelle
2

Ich stieß auf das gleiche Problem. Es sieht so aus, als ob UIHint für komplexe Typen standardmäßig ignoriert wird. Sie können das Verhalten überschreiben, aber es ist nicht einfach. Also wäre die einfachere Lösung:

1) Entfernen Sie die UIHint Annotation. 2) Stellen Sie statt dessen sicher, dass Ihre Anzeigevorlagendatei als der Typname benannt ist, den Html.DisplayFor automatisch durchlaufen soll. Benennen Sie in diesem Fall die Anzeigevorlagendatei als SomeViewModel.cshtml. Das sollte funktionieren. Die for-Schleife muss nicht explizit verwendet werden. Ich habe es in MVC4 versucht und es funktioniert.

Ich habe die Lösung von folgendem Link: Ссылка

    
geetmenon 05.06.2013 22:41
quelle