J'ai besoin d'aide avec l'assistant de sélection de balise dans ASP.NET Core.
J'ai une liste d'employés que j'essaie de lier à un assistant de sélection de balises. Mes employés sont dans une List<Employee> EmployeesList
valeur sélectionnée et iront dans la EmployeeId
propriété. Mon modèle de vue ressemble à ceci:
public class MyViewModel
{
public int EmployeeId { get; set; }
public string Comments { get; set; }
public List<Employee> EmployeesList {get; set; }
}
Ma classe d'employés ressemble à ceci:
public class Employee
{
public int Id { get; set; }
public string FullName { get; set; }
}
Ma question est de savoir comment dire à mon assistant de sélection de balise d'utiliser le Id
comme valeur lors de l'affichage FullName
dans la liste déroulante?
<select asp-for="EmployeeId" asp-items="???" />
J'apprécierais de l'aide avec ceci. Merci.
Réponses:
Utilisation des assistants Select Tag pour rendre un élément SELECT
Dans votre action GET, créez un objet de votre modèle de vue, chargez la
EmployeeList
propriété de collection et envoyez-la à la vue.Et dans votre vue de création, créez un nouvel
SelectList
objet à partir de laEmployeeList
propriété et transmettez-le comme valeur pour laasp-items
propriété.Et votre méthode d'action HttpPost pour accepter les données de formulaire soumises.
Ou
Si votre modèle de vue a une
List<SelectListItem>
comme propriété pour vos éléments de liste déroulante.Et dans ton action,
Et dans la vue, vous pouvez directement utiliser la
Employees
propriété pour leasp-items
.La classe
SelectListItem
appartient à l'Microsoft.AspNet.Mvc.Rendering
espace de noms.Assurez-vous que vous utilisez une balise de fermeture explicite pour l'élément de sélection. Si vous utilisez l'approche de balise à fermeture automatique, l'assistant de balise rendra un élément SELECT vide!
L'approche ci-dessous ne fonctionnera pas
Mais cela fonctionnera.
Obtenir des données de votre table de base de données à l'aide de la structure d'entité
Les exemples ci-dessus utilisent des éléments codés en dur pour les options. J'ai donc pensé ajouter un exemple de code pour obtenir des données à l'aide du framework Entity, car beaucoup de gens l'utilisent.
Supposons que votre objet DbContext a une propriété appelée
Employees
, qui est de typeDbSet<Employee>
où laEmployee
classe d'entité a une propriétéId
andName
comme celle-ciVous pouvez utiliser une requête LINQ pour obtenir les employés et utiliser la méthode Select dans votre expression LINQ pour créer une liste d'
SelectListItem
objets pour chaque employé.En supposant que
context
votre objet de contexte db. Le code de vue est le même que ci-dessus.Utilisation de SelectList
Certaines personnes préfèrent utiliser la
SelectList
classe pour contenir les éléments nécessaires au rendu des options.Maintenant, dans votre action GET, vous pouvez utiliser le
SelectList
constructeur pour renseigner laEmployees
propriété du modèle de vue. Assurez-vous de spécifier les paramètresdataValueField
etdataTextField
.Ici , je fais appel à la
GetEmployees
méthode pour obtenir une liste des objets employés, chacun avec uneId
etFirstName
propriété et j'utiliser ces propriétésDataValueField
etDataTextField
de l'SelectList
objet que nous avons créé. Vous pouvez modifier la liste codée en dur en un code qui lit les données d'une table de base de données.Le code de vue sera le même.
Rendu un élément SELECT à partir d'une liste de chaînes.
Parfois, vous souhaiterez peut-être rendre un élément de sélection à partir d'une liste de chaînes. Dans ce cas, vous pouvez utiliser le
SelectList
constructeur qui ne prend queIEnumerable<T>
Le code de vue sera le même.
Définition des options sélectionnées
Parfois, vous souhaiterez peut-être définir une option comme option par défaut dans l'élément SELECT (par exemple, dans un écran d'édition, vous souhaitez charger la valeur d'option précédemment enregistrée). Pour ce faire, vous pouvez simplement définir la
EmployeeId
valeur de la propriété sur la valeur de l'option que vous souhaitez sélectionner.Cela sélectionnera l'option Tom dans l'élément de sélection lorsque la page est rendue.
Liste déroulante de sélection multiple
Si vous souhaitez rendre une liste déroulante à sélection multiple, vous pouvez simplement modifier la propriété de votre modèle de vue que vous utilisez pour l'
asp-for
attribut dans votre vue en un type de tableau.Cela rendra le balisage HTML pour l'élément select avec l'
multiple
attribut qui permettra à l'utilisateur de sélectionner plusieurs options.Définition des options sélectionnées dans la sélection multiple
Similaire à la sélection unique, définissez la
EmployeeIds
valeur de la propriété sur le tableau de valeurs souhaité.Cela sélectionnera l'option Tom et Jerry dans l'élément de sélection multiple lorsque la page est rendue.
Utilisation de ViewBag pour transférer la liste des articles
Si vous ne préférez pas conserver une propriété de type collection pour transmettre la liste d'options à la vue, vous pouvez utiliser le ViewBag dynamique pour le faire. ( Ce n'est pas mon approche personnellement recommandée car viewbag est dynamique et votre code est susceptible de ne pas être corrigé. fautes de frappe )
et dans la vue
Utilisation de ViewBag pour transférer la liste des éléments et paramétrer l'option sélectionnée
C'est la même chose que ci-dessus. Tout ce que vous avez à faire est de définir la valeur de la propriété (pour laquelle vous liez la liste déroulante) sur la valeur de l'option que vous souhaitez sélectionner.
et dans la vue
Regrouper des éléments
La méthode d'aide à la sélection de balises prend en charge les options de regroupement dans une liste déroulante. Tout ce que vous avez à faire est de spécifier la
Group
valeur de propriété de chacunSelectListItem
dans votre méthode d'action.Il n'y a pas de changement dans le code de vue. l'assistant de sélection de balises rendra désormais les options à l'intérieur de 2 éléments optgroup .
la source
<option>Please select one</option>
J'ai créé une interface et un
<options>
tag helper pour cela. Je n'ai donc pas eu à convertir lesIEnumerable<T>
éléments enIEnumerable<SelectListItem>
chaque fois que je dois remplir le<select>
contrôle.Et je pense que cela fonctionne à merveille ...
L'utilisation est quelque chose comme:
Et pour que cela fonctionne avec l'assistant de balise, vous devez implémenter cette interface dans votre classe:
Voici les codes nécessaires:
L'interface:
Le
<options>
tag helper:Il y a peut-être une faute de frappe mais le but est clair je pense. J'ai dû modifier un peu.
la source
Vous pouvez également utiliser IHtmlHelper.GetEnumSelectList.
la source
Ma réponse ci - dessous ne résout pas la question mais elle se rapporte à.
Si quelqu'un utilise à la
enum
place d'un modèle de classe, comme cet exemple:Et une propriété pour obtenir la valeur lors de la soumission:
Dans la page rasoir, vous pouvez utiliser
Html.GetEnumSelectList<Counter>()
pour obtenir les propriétés enum.Il génère le HTML suivant:
la source
Vous pouvez utiliser le code ci-dessous pour une sélection multiple :
Vous pouvez aussi utiliser:
la source
Dans Get:
En poste:
En vue :
la source