ASP.NET Web Forms (4.5) Stark typisierte Modellbindung - DropDownList in InsertItemTemplate von ListView

8

Hinweis: Dies ist die ASP.NET-Web Forms-Modellbindung in .NET 4.5 und NICHT in MVC.

Ich verwende die neuen stark typisierten Modellbindungsfunktionen von ASP.NET Web Forms (4.5), um eine Liste von Elementen zu erstellen, die bearbeitet werden können. Dies funktioniert einwandfrei, um die ursprüngliche Liste anzuzeigen, ein Element zu bearbeiten und ein Element zu löschen. Ich habe jedoch ein Problem mit dem Einfügen eines neuen Artikels.

Insbesondere habe ich in meiner EditItemTemplate und InsertItemTemplate eine DropDownList (naja, eigentlich ist es ein benutzerdefiniertes Steuerelement, das von DropDownList abgeleitet ist, aber für die Zwecke dieser Frage ist es eine DropDownList). Das Steuerelement wird im Markup wie folgt definiert ...

%Vor%

Innerhalb der EditItemTemplate ist dies in Ordnung, jedoch erzeugt dies innerhalb der InsertItemTemplate einen Fehler beim Ausführen der Seite: Datenbindungsmethoden wie Eval (), XPath () und Bind () können nur im Zusammenhang mit verwendet werden ein datengebundenes Steuerelement.

Als solche habe ich den Abschnitt SelectedValue="<%#: BindItem.ClientStatusID %>" aus der InsertItemTemplate entfernt und es erneut versucht. Diesmal keine Fehlermeldung, wenn jedoch ListView.InsertMethod aufgerufen wird, wird die ClientStatusID -Eigenschaft im Modell nicht auf den Wert der DropDownList gesetzt (während die restlichen Eigenschaften korrekt eingestellt sind).

Das ListView.InsertMethod:

%Vor%

Die Model-Klasse:

%Vor%

Das EditItemTemplate:

%Vor%

Das InsertItemTemplate:

%Vor%

Ich hatte ursprünglich gedacht, dass es die ID des Steuerelements war, die verwendet wurde, um die Eigenschaft im Modell zu bestimmen, an die der Wert übergeben würde (dh wo die TextBox "Beschreibung" genannt wurde) "Beschreibung" Eigenschaft des Modells). Natürlich ist dies nicht der Fall und wird stattdessen von "& lt;% # BindItem.Description% & gt;" gesteuert, aber wie Sie aus dem Rest dieser Frage sehen können, kann ich diese Syntax nicht in "InsertItemTemplate" verwenden. Ich kann nicht glauben, dass die DropDownList in diesem Szenario nicht unterstützt wird, aber ich finde keine Beispiele für eine DropDownList, die mit den 4.5-Modellbindungen mit Google oder Bing verwendet wird (tatsächlich gibt es nur sehr wenige Beispiele für die neue Modellbindung in ASP). NET 4.5 mit etwas anderem als ein paar TextBox-Steuerelementen).

Kann jemand das Thema weiter beleuchten (und mir lieber sagen, was zu tun ist)?

Andere Fragen zu SO, die ich angeschaut habe ...

Alle diese verwenden die Bindungsmethoden älteren Stils und nicht die neuen Methoden in 4.5

Danke.

    
Martin Robins 18.02.2013, 10:09
quelle

1 Antwort

6

Ich habe an etwas ähnlichem gearbeitet und konnte eine Probe zur Arbeit bringen, also dachte ich, ich würde das, was ich habe, posten und sehen, ob dir das hilft.

Hier ist mein Seitencode:

%Vor%

Und mein Code dahinter:

%Vor%

Sie haben nicht Ihr gesamtes ListView-Beispiel gepostet, daher nehme ich eine Vermutung an, wie Sie es einrichten könnten. Bitte lassen Sie mich wissen, ob dies hilft und ob / wie dies für Sie funktioniert, da Ihr Code praktikabel aussieht und ich bin neugierig, was Ihr Problem verursacht.

    
John 24.02.2013, 18:24
quelle