Was funktioniert nicht? Läuft Ihr Code? Generiert es eine Zeichenfolge?
Sie haben mindestens einen Tippfehler, der dazu führt, dass die generierte Zeichenfolge nicht in einem HTML-Formular funktioniert. Sollte <option value={0}>{1}</option>
Edit 2 sein: Um die IDictionary(Of Object, String)
von Ihrem EF Objekte zu bekommen, würde ich Teilklassenimplementierungen schreiben, die eine GetSelectOptions
Methode, um jedes Ihrer Objekte hinzuzufügen. Oder erstellen Sie eine Schnittstelle mit der Methode, die jedes Ihrer EF-Objekte implementiert. Dann rufen Sie einfach die RenderSelect
Methode an und übergeben Sie EFObject.GetSelectOptions
als SelectOptions
Parameter.
Bearbeiten: Hier ist, wie ich das tun würde. Machen Sie Ihren Aufrufcode verantwortlich für das Lesen der Schlüssel/Wert-Paare von Ihrem EF-Objekt. Dann kann Ihre RenderSelect-Erweiterungsmethode viel sauberer sein. Sie möchten nicht, dass Ihre View-Helper-Methoden von der Struktur Ihrer Modellobjekte abhängig sind. Und Sie möchten sicherlich nicht, dass Ihre Hilfsmethode davon abhängt, dass Sie EF-Objekte verwenden.
Public Function RenderSelect(ByVal helper As HtmlHelper, _
ByVal name As String, _
ByVal SelectOptions As IDictionary(Of Object, String), _
ByVal SelectedKey As Object, _
ByVal htmlAttributes As IDictionary(Of String, Object)) As String
Dim result = <select name=<%= name %>/>
Dim optElement As XElement
For Each opt In SelectOptions
optElement = <option value=<%= opt.Key.ToString %>><%= opt.Value %></option>
If opt.Key.Equals(SelectedKey) Then
[email protected] = "1"
End If
result.Add(optElement)
Next
If htmlAttributes IsNot Nothing Then
For Each attr In htmlAttributes
result.SetAttributeValue(attr.Key, attr.Value)
Next
End If
Return result.ToString
End Function
Für einen kompletten Satz von überladenen Funktionen in Dropdownlist VB.NET, überprüfen Sie diese Datei aus dem vbmvc.codeplex.com Projekt aus, aus dem das obige Code kopiert und geändert wurde.
http://vbmvc.codeplex.com/sourcecontrol/changeset/view/19233?projectName=VBMVC#331689
Dieser Code hat einen Rückgabetyp von XElement, aber nur result.ToString verwenden, um die String-Darstellung des Elements zu erhalten, wenn das ist, was Sie wollen.
Vielleicht können Sie zunächst die Compiler-Fehler lesen ... – Paco
würde es tatsächlich einfacher für mich um Probleme mit dem echten Code zu identifizieren. Ihr Pseudocode sieht gut aus. – CoderDennis