Ich benötige Hilfe beim Auswahl-Tag-Helfer in ASP.NET Core.
Ich habe eine Liste von Mitarbeitern, die ich an einen ausgewählten Tag-Helfer binden möchte. Meine Mitarbeiter sind in einem List<Employee> EmployeesList
und ausgewählten Wert wird in EmployeeId
Eigentum gehen . Mein Ansichtsmodell sieht folgendermaßen aus:
public class MyViewModel
{
public int EmployeeId { get; set; }
public string Comments { get; set; }
public List<Employee> EmployeesList {get; set; }
}
Meine Mitarbeiterklasse sieht folgendermaßen aus:
public class Employee
{
public int Id { get; set; }
public string FullName { get; set; }
}
Meine Frage ist, wie ich meinem Select-Tag-Helfer mitteilen kann, dass er Id
den Wert als Wert verwenden soll, während er FullName
in der Dropdown-Liste angezeigt wird.
<select asp-for="EmployeeId" asp-items="???" />
Ich würde mich über Hilfe dabei freuen. Vielen Dank.
Antworten:
Verwenden der Select Tag-Helfer zum Rendern eines SELECT-Elements
Erstellen Sie in Ihrer GET-Aktion ein Objekt Ihres Ansichtsmodells, laden Sie die
EmployeeList
Sammlungseigenschaft und senden Sie diese an die Ansicht.Erstellen Sie in Ihrer Erstellungsansicht ein neues
SelectList
Objekt aus derEmployeeList
Eigenschaft und übergeben Sie dieses als Wert für dieasp-items
Eigenschaft.Und Ihre HttpPost-Aktionsmethode zum Akzeptieren der übermittelten Formulardaten.
Oder
Wenn Ihr Ansichtsmodell eine
List<SelectListItem>
Eigenschaft als Eigenschaft für Ihre Dropdown-Elemente hat.Und in Ihrer Aktion,
Und in der Ansicht können Sie die
Employees
Eigenschaft direkt für die verwendenasp-items
.Die Klasse
SelectListItem
gehört zumMicrosoft.AspNet.Mvc.Rendering
Namespace.Stellen Sie sicher, dass Sie ein explizites schließendes Tag für das Auswahlelement verwenden. Wenn Sie den selbstschließenden Tag-Ansatz verwenden, rendert der Tag-Helfer ein leeres SELECT-Element!
Der folgende Ansatz funktioniert nicht
Aber das wird funktionieren.
Abrufen von Daten aus Ihrer Datenbanktabelle mithilfe des Entity Framework
In den obigen Beispielen werden fest codierte Elemente für die Optionen verwendet. Also dachte ich, ich werde einen Beispielcode hinzufügen, um Daten mit dem Entity Framework zu erhalten, da viele Leute das verwenden.
Nehmen wir an, Ihr DbContext-Objekt hat eine Eigenschaft namens
Employees
, die vom Typ ist,DbSet<Employee>
in dem dieEmployee
Entitätsklasse eineId
und -EigenschaftName
wie diese hatSie können eine LINQ-Abfrage verwenden, um die Mitarbeiter abzurufen, und die Select-Methode in Ihrem LINQ-Ausdruck verwenden, um eine Liste von
SelectListItem
Objekten für jeden Mitarbeiter zu erstellen .Angenommen, es
context
handelt sich um Ihr Datenbankkontextobjekt. Der Ansichtscode ist der gleiche wie oben.Verwenden von SelectList
Einige Leute bevorzugen es, die
SelectList
Klasse zu verwenden, um die Elemente zu speichern, die zum Rendern der Optionen erforderlich sind.Jetzt können Sie in Ihrer GET-Aktion den
SelectList
Konstruktor verwenden, um dieEmployees
Eigenschaft des Ansichtsmodells zu füllen. Stellen Sie sicher, dass Sie die ParameterdataValueField
unddataTextField
angeben.Hier rufe ich die
GetEmployees
Methode auf, um eine Liste der Mitarbeiterobjekte mit jeweils einerId
undFirstName
-Eigenschaft abzurufen, und verwende diese Eigenschaften alsDataValueField
undDataTextField
für das vonSelectList
uns erstellte Objekt. Sie können die fest codierte Liste in einen Code ändern, der Daten aus einer Datenbanktabelle liest.Der Ansichtscode ist derselbe.
Rendern Sie ein SELECT-Element aus einer Liste von Zeichenfolgen.
Manchmal möchten Sie möglicherweise ein ausgewähltes Element aus einer Liste von Zeichenfolgen rendern. In diesem Fall können Sie den
SelectList
Konstruktor verwenden, der nur benötigtIEnumerable<T>
Der Ansichtscode ist derselbe.
Ausgewählte Optionen einstellen
Manchmal möchten Sie möglicherweise eine Option als Standardoption im SELECT-Element festlegen (z. B. möchten Sie in einem Bearbeitungsbildschirm den zuvor gespeicherten Optionswert laden). Dazu können Sie den
EmployeeId
Eigenschaftswert einfach auf den Wert der Option setzen, die Sie auswählen möchten.Dadurch wird die Option Tom im Auswahlelement ausgewählt, wenn die Seite gerendert wird.
Dropdown-Liste mit Mehrfachauswahl
Wenn Sie ein Dropdown-Menü mit Mehrfachauswahl rendern möchten, können Sie einfach die Eigenschaft Ihres Ansichtsmodells, die Sie für das
asp-for
Attribut in Ihrer Ansicht verwenden, in einen Array-Typ ändern .Dadurch wird das HTML-Markup für das Auswahlelement mit dem
multiple
Attribut gerendert, mit dem der Benutzer mehrere Optionen auswählen kann.Ausgewählte Optionen in Mehrfachauswahl einstellen
Setzen Sie den
EmployeeIds
Eigenschaftswert ähnlich wie bei der Einzelauswahl auf ein Array von Werten, die Sie möchten.Dadurch wird die Option Tom und Jerry im Mehrfachauswahlelement ausgewählt, wenn die Seite gerendert wird.
Verwenden von ViewBag zum Übertragen der Liste der Elemente
Wenn Sie es nicht vorziehen, eine Sammlungstyp-Eigenschaft beizubehalten, um die Liste der Optionen an die Ansicht zu übergeben, können Sie dies mit dem dynamischen ViewBag tun. ( Dies ist nicht mein persönlich empfohlener Ansatz, da viewbag dynamisch ist und Ihr Code nicht abgefangen werden kann Tippfehler )
und in der Ansicht
Verwenden von ViewBag zum Übertragen der Liste der Elemente und Festlegen der ausgewählten Option
Es ist das gleiche wie oben. Alles, was Sie tun müssen, ist, den Wert der Eigenschaft (für die Sie das Dropdown-Menü binden) auf den Wert der Option festzulegen, die Sie auswählen möchten.
und in der Ansicht
Elemente gruppieren
Die Select-Tag-Hilfsmethode unterstützt Gruppierungsoptionen in einer Dropdown-Liste. Sie müssen lediglich den
Group
Eigenschaftswert der einzelnenSelectListItem
Elemente in Ihrer Aktionsmethode angeben .Der Ansichtscode wird nicht geändert. Der Select-Tag-Helfer rendert nun die Optionen in 2 Optgruppenelementen .
quelle
<option>Please select one</option>
Ich habe dafür eine Schnittstelle und einen
<options>
Tag-Helfer erstellt. Ich musste dieIEnumerable<T>
Elemente also nichtIEnumerable<SelectListItem>
jedes Mal konvertieren , wenn ich das<select>
Steuerelement füllen musste.Und ich denke es funktioniert wunderbar ...
Die Verwendung ist so etwas wie:
Und damit es mit dem Tag-Helfer funktioniert, müssen Sie diese Schnittstelle in Ihrer Klasse implementieren:
Dies sind die benötigten Codes:
Die Schnittstelle:
Der
<options>
Tag-Helfer:Es mag Tippfehler geben, aber das Ziel ist klar, denke ich. Ich musste ein bisschen bearbeiten.
quelle
Sie können auch IHtmlHelper.GetEnumSelectList verwenden.
quelle
Meine Antwort unten nicht lösen die Frage , sondern es bezieht sich auf.
Wenn jemand
enum
anstelle eines Klassenmodells Folgendes verwendet:Und eine Eigenschaft, um den Wert beim Einreichen zu erhalten:
Auf der Rasierseite können Sie
Html.GetEnumSelectList<Counter>()
die Aufzählungseigenschaften abrufen.Es generiert den folgenden HTML-Code:
quelle
Sie können den folgenden Code für die Mehrfachauswahl verwenden :
Sie können auch verwenden:
quelle
In Get:
In der Post:
Im Hinblick auf :
quelle