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,
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.
Zweitens müssen Sie Ihre Aktionsmethode ändern.
Drittens müssen Sie Ihre EditProductViewModel
-Klasse aktualisieren.
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.
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.
Meine Lieblingsmethode ist eine separate interface
für die reine Datenbindung.
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.
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.
Tags und Links asp.net-mvc mvvm