mvc.net wie man stark typisierte Helfer beim Durchlaufen der Liste verwendet

8

Ich habe eine Teilansicht, die eine Liste von Objekten in ein Tabellenformat rendert und die Bearbeitung der Werte erlaubt ...

%Vor%

Ich möchte dies umgestalten, um die stark typisierten HTML-Helfer in mvc2 zu nutzen. Mir fällt es schwer zu verstehen, wie man die Lambda-Ausdrücke erzeugt, und ich hoffe auf etwas Hilfe. das folgende scheint mir nicht ganz richtig zu sein.

%Vor%     
yamspog 14.09.2010, 16:36
quelle

4 Antworten

8

Zunächst sollten Sie nicht in einer Ansicht iterieren. Iterieren bedeutet Schleifen, Schleifen bedeuten C # / VB.NET, C # / VB.NET in einer Ansicht führt zu Spaghettikode.

Ich würde Ihnen empfehlen, Editor-Vorlagen . Auf diese Weise müssen Sie keine Schleifen in Ihren Ansichten schreiben. Fügen Sie die folgende Datei in ~/Views/Home/EditorTemplates/PictureModel.ascx hinzu:

%Vor%

Beachten Sie, dass das Partial jetzt stark in whoozit.Models.PictureModel statt in IList<whoozit.Models.PictureModel> eingetippt ist. Jetzt müssen Sie nur noch dieses Teil aus der Hauptansicht einschließen:

%Vor%

Dabei ist Pictures eine Eigenschaft des Typs IList<whoozit.Models.PictureModel> in Ihrem Hauptansichtsmodell. Dadurch wird für jedes Element der Sammlung automatisch die partielle aufgerufen, so dass Sie keine hässlichen Schleifen in Ihren Ansichten schreiben müssen.

Es funktioniert nur per Konvention: das Teil muss PictureModel.ascx als Typname der Listenelemente heißen und sich im Ordner ~/Views/Home/EditorTemplates oder ~/Views/Shared/EditorTemplates befinden.

Editor / Display-Vorlagen werden Ihre Ansichten viel eleganter machen.

Anmerkung: In .NET sind die Property-Namen mit Großbuchstaben zu beginnen, daher würde ich Ihnen empfehlen, die Eigenschaft name in Name umzubenennen. Es ist einfach natürlicher, zu schreiben und zu lesen:

%Vor%     
Darin Dimitrov 15.09.2010, 20:58
quelle
2

Sie können stark typisierte Hilfsmethoden verwenden, indem Sie das Modell mit einer for-Schleife durchlaufen. Dadurch wird auch das html-Attribut "name" eindeutig, sodass das Modellbinderelement Ihnen helfen kann, die Werte in einer sicheren Situation an Ihr Modell zuzuordnen.

%Vor%

Lesen Sie hier mehr .. Ссылка

    
rax 19.12.2010 19:56
quelle
1
%Vor%     
RedFilter 14.09.2010 16:40
quelle
1

Sie sagen Ihrer teilweisen Ansicht, dass Sie eine Liste von whoozit.Models.PictureModel-Elementen erwarten. Dann sucht deine Foreach nach whoozit.Models.Picture nicht PictureModel. Unten ist, wie ich normalerweise so etwas tun würde. Stellen Sie sicher, dass Ihre Liste, die Sie zu nummerieren versuchen, der richtige Typ ist. Wenn die Bildklasse aus einer Sammlung innerhalb des PictureModels stammt, stellen Sie sicher, dass Sie Model. Was auch immer in der foreach machen.

Versuchen Sie Folgendes:

%Vor%     
Terry Nederveld 14.09.2010 17:35
quelle