ViewModel mit SelectList-Bindung in ASP.NET MVC2

8

Ich versuche ein Edit ViewModel für meine Linq2SQL-Entität namens Product zu implementieren. Es hat einen Fremdschlüssel, der mit einer Liste von Marken verknüpft ist.

Zur Zeit bearbeite ich die Markenliste über ViewData und benutze DropDownListFor, also:

%Vor%

Nun möchte ich die Ansicht umgestalten, um ein stark typisiertes ViewModel und Html.EditorForModel () zu verwenden:

%Vor%

In meinem Edit ViewModel habe ich Folgendes:

%Vor%

Der Controller ist wie folgt eingerichtet:

%Vor%

Die ProductId, der Name und die Beschreibung werden in der generierten Ansicht korrekt angezeigt, die Auswahlliste jedoch nicht. Die Markenliste enthält definitiv Daten.

Wenn ich in meiner Sicht Folgendes tue, ist die SelectList sichtbar:

%Vor%

Was mache ich falsch? Unterstützt EditorForModel () generisch nicht die SelectList? Fehle ich eine Art von DataAnnotation?

Ich kann anscheinend keine Beispiele für die Verwendung von SelectList in ViewModels finden, die helfen. Ich bin wirklich ratlos. Diese Antwort scheint nah zu sein, hat aber nicht geholfen.

    
Junto 25.02.2010, 10:40
quelle

3 Antworten

4

Junto,

Die Methode Html.EditorForModel() ist nicht intelligent genug, um BrandId mit der Auswahlliste Brands übereinzustimmen.

Erstens können Sie die Methode EditorForModel() nicht verwenden.
Sie müssen Ihre eigene HTML-Vorlage wie folgt erstellen.

%Vor%



Zweitens müssen Sie Ihre Aktionsmethode ändern.

%Vor%



Drittens müssen Sie Ihre EditProductViewModel -Klasse aktualisieren.

%Vor%

Sie sagen jetzt wahrscheinlich: Alter, wo ist meine [ProductId] Eigenschaft? ".
Kurze Antwort: Sie brauchen es nicht!

Der von Ihrer Ansicht gerenderte HTML-Code weist bereits auf die Aktionsmethode "Edit" mit einer entsprechenden "ProductId" wie unten gezeigt hin.

%Vor%

Dies ist Ihre HTTP POST-Aktionsmethode und akzeptiert 2 Parameter.
Die "ID" kommt von der & lt; Form & gt; Das Aktionsattribut des Tags.

%Vor%

Die ExportModelStateToTempData und ImportModelStateFromTempData sind sehr nützlich.
Diese Attribute werden für das PRG-Muster (Post Redirect Get) verwendet.

Lesen Sie diesen Abschnitt PRG-Muster für Datenänderung verwenden in diesem Blogbeitrag von Kazi Manzur Rashid .
Ссылка




Okay, dieser Datenbindungscode ist nicht meine bevorzugte Vorgehensweise.

%Vor%

Meine Lieblingsmethode ist eine separate interface für die reine Datenbindung.

%Vor%

Und so werde ich meinen Datenbindungscode aktualisieren.

%Vor%

Was das hilft, ist, dass es für mich einfach ist, meine Modellobjekte von Post-Back-Daten zu binden. Darüber hinaus wird dadurch die Sicherheit erhöht, da Sie nur die Daten binden, für die Sie eine Bindung herstellen möchten. Nicht mehr und nicht weniger.

Lass es mich wissen, wenn du Fragen hast.

    
stun 18.06.2010, 23:03
quelle
1

Ein neues Attribut DropDownList für Ihre Property BrandId kann hilfreich sein. Sehen Sie sich die Erweiterung von ASP.NET MVC an 2 Vorlagen Artikel. Bei diesem Ansatz wird jedoch ViewData als Elementquelle für die Auswahlliste verwendet.

    
Serge S. 06.05.2010 06:06
quelle
0

Sie sollten diese Suche IN Ihr ViewModel erstellen. Erstellen Sie dann ein Builder-Objekt, das das ViewModel erstellt und diese Suche auffüllt.

Schließlich ist Ihr ViewModel dafür gedacht: ein Modell speziell für Ihre Ansicht bereitzustellen.

    
Nexxas 19.03.2010 21:04
quelle

Tags und Links