Potrzebuję pomocy dotyczącej pomocnika wyboru tagów w ASP.NET Core.
Mam listę pracowników, których próbuję powiązać z pomocnikiem do wybierania tagów. Moi pracownicy są w stanie List<Employee> EmployeesList
i wybrana wartość trafi do EmployeeId
nieruchomości. Mój model widoku wygląda następująco:
public class MyViewModel
{
public int EmployeeId { get; set; }
public string Comments { get; set; }
public List<Employee> EmployeesList {get; set; }
}
Moja klasa pracownicza wygląda następująco:
public class Employee
{
public int Id { get; set; }
public string FullName { get; set; }
}
Moje pytanie brzmi: jak mam powiedzieć mojemu pomocnikowi tagów wyboru, aby używał Id
jako wartości podczas wyświetlania FullName
na liście rozwijanej?
<select asp-for="EmployeeId" asp-items="???" />
Byłbym wdzięczny za pomoc w tym. Dzięki.
Odpowiedzi:
Używanie pomocników Select Tag do renderowania elementu SELECT
W akcji GET utwórz obiekt swojego modelu widoku, załaduj
EmployeeList
właściwość kolekcji i wyślij ją do widoku.W widoku tworzenia utwórz nowy
SelectList
obiekt zEmployeeList
właściwości i przekaż go jako wartośćasp-items
właściwości.Oraz metodę akcji HttpPost, aby zaakceptować przesłane dane formularza.
Lub
Jeśli Twój model widoku ma
List<SelectListItem>
właściwość elementów listy rozwijanej.A w twojej akcji get,
W widoku możesz bezpośrednio użyć
Employees
właściwości dlaasp-items
.Klasa
SelectListItem
należy doMicrosoft.AspNet.Mvc.Rendering
przestrzeni nazw.Upewnij się, że używasz wyraźnego tagu zamykającego dla elementu select. Jeśli używasz samozamykającego się tagu, pomocnik tagu wyrenderuje pusty element SELECT!
Poniższe podejście nie zadziała
Ale to zadziała.
Pobieranie danych z tabeli bazy danych przy użyciu struktury encji
Powyższe przykłady używają elementów zakodowanych na stałe dla opcji. Pomyślałem więc, że dodam przykładowy kod, aby uzyskać dane za pomocą frameworka Entity, ponieważ wiele osób z niego korzysta.
Załóżmy, że Twój obiekt DbContext ma właściwość o nazwie
Employees
, która jest typu, wDbSet<Employee>
którymEmployee
klasa jednostki ma właściwośćId
iName
taką jak taMożesz użyć zapytania LINQ, aby pobrać pracowników i użyć metody Select w wyrażeniu LINQ, aby utworzyć listę
SelectListItem
obiektów dla każdego pracownika.Zakładając, że
context
jest to obiekt kontekstu db. Kod widoku jest taki sam jak powyżej.Korzystanie z SelectList
Niektórzy wolą używać
SelectList
klasy do przechowywania elementów potrzebnych do renderowania opcji.Teraz w akcji GET możesz użyć
SelectList
konstruktora do wypełnieniaEmployees
właściwości modelu widoku. Upewnij się, że określasz parametrydataValueField
idataTextField
.Ja tu wywołanie
GetEmployees
metody, aby uzyskać listę obiektów pracownicze, każdy zId
iFirstName
mienia i używam tych właściwości, jakDataValueField
iDataTextField
naSelectList
obiekcie stworzyliśmy. Możesz zmienić zakodowaną listę na kod, który odczytuje dane z tabeli bazy danych.Kod widoku będzie taki sam.
Renderuj element SELECT z listy ciągów.
Czasami możesz chcieć wyrenderować wybrany element z listy ciągów. W takim przypadku możesz użyć
SelectList
konstruktora, który zajmuje tylko plikiIEnumerable<T>
Kod widoku będzie taki sam.
Ustawianie wybranych opcji
Czasami możesz chcieć ustawić jedną opcję jako opcję domyślną w elemencie SELECT (na przykład na ekranie edycji chcesz załadować poprzednio zapisaną wartość opcji). Aby to zrobić, możesz po prostu ustawić
EmployeeId
wartość właściwości na wartość opcji, którą chcesz wybrać.Spowoduje to wybranie opcji Tom w elemencie select, gdy strona jest renderowana.
Lista rozwijana wielokrotnego wyboru
Jeśli chcesz renderować listę rozwijaną wielokrotnego wyboru, możesz po prostu zmienić właściwość modelu widoku, której używasz dla
asp-for
atrybutu w widoku, na typ tablicy.Spowoduje to renderowanie znaczników HTML dla elementu select z
multiple
atrybutem, który pozwoli użytkownikowi wybrać wiele opcji.Ustawianie wybranych opcji w trybie wielokrotnego wyboru
Podobnie jak w przypadku wyboru pojedynczego, ustaw
EmployeeIds
wartość właściwości na tablicę żądanych wartości.Spowoduje to wybranie opcji Tom i Jerry w elemencie wielokrotnego wyboru podczas renderowania strony.
Używanie ViewBag do przesyłania listy elementów
Jeśli nie wolisz zachować właściwości typu kolekcji, aby przekazać listę opcji do widoku, możesz użyć dynamicznego ViewBag, aby to zrobić ( nie jest to moje osobiście zalecane podejście, ponieważ obszar widoku jest dynamiczny, a kod jest podatny na literówki )
i w widoku
Używanie ViewBag do przenoszenia listy elementów i ustawiania wybranej opcji
Tak samo jak powyżej. Wszystko, co musisz zrobić, to ustawić wartość właściwości (dla której wiążesz listę rozwijaną) na wartość opcji, którą chcesz wybrać.
i w widoku
Grupowanie elementów
Metoda pomocnika wyboru tagów obsługuje opcje grupowania w menu rozwijanym. Wszystko, co musisz zrobić, to określić
Group
wartość właściwości każdego z nichSelectListItem
w swojej metodzie akcji.Nie ma zmian w kodzie widoku. pomocnik tagów wyboru będzie teraz renderował opcje wewnątrz 2 elementów optgroup .
źródło
<option>Please select one</option>
Stworzyłem do tego interfejs i
<options>
pomocnika tagów. Nie musiałem więc konwertowaćIEnumerable<T>
elementów na zaIEnumerable<SelectListItem>
każdym razem, gdy muszę wypełnić<select>
formant.I myślę, że działa pięknie ...
Użycie jest takie jak:
Aby działało z pomocnikiem tagów, musisz zaimplementować ten interfejs w swojej klasie:
Oto potrzebne kody:
Interfejs:
<options>
Tag pomocnika:Może być pewna literówka, ale myślę, że cel jest jasny. Musiałem trochę edytować.
źródło
Możesz również użyć IHtmlHelper.GetEnumSelectList.
źródło
Moja odpowiedź poniżej nie rozwiązuje pytania, ale dotyczy .
Jeśli ktoś używa
enum
zamiast modelu klasy, na przykład:Oraz właściwość do pobrania wartości podczas przesyłania:
Na stronie maszynki do golenia możesz użyć,
Html.GetEnumSelectList<Counter>()
aby uzyskać właściwości wyliczenia.Generuje następujący kod HTML:
źródło
Możesz użyć poniższego kodu do wielokrotnego wyboru :
Możesz także użyć:
źródło
W Get:
W poście:
Z uwagi :
źródło