MVC6 Dropdownlist de Pays
Je suis en train d'utiliser MVC6 Tag Aides pour créer un dropdownlist de l'indicatif du pays et CountryName de sorte qu'un utilisateur peut sélectionner leur pays après l'inscription. La partie pertinente de l'affichage apparaît comme jusqu'à présent,
<form asp-controller="Manage" asp-action="EditCountry" asp-route-returnurl="@ViewData["ReturnUrl"]">
<div asp-validation-summary="ValidationSummary.ModelOnly" class="text-danger"></div>
<select asp-for="CountryCode" asp-items="@Model.Countries"></select>
La partie pertinente du viewmodel ressemble à ceci
[Display(Name = "Country")]
public string CountryCode { get; set; }
public IEnumerable<Country> Countries { get; set; }
Un Pays ressemble à ce
public partial class Country
{
[Key]
public string CountryCode { get; set; }
public string CountryName { get; set; }
public virtual ICollection<ApplicationUser> Users { get; set; }
}
Le contrôleur retourne une liste de pays pour le viewmodel
var model = new IndexViewModel
{
CountryCode = user.CountryCode,
Countries =_customersContext.Countries.OrderBy(c=>c.CountryName),
};
return View(model);
}
mais, de l'avis asp-items="@Model.Countries"
a un enchevêtrées Cannot convert Country to SelectListItem
Aussi je ne trouve pas comment faire dans le formulaire pour indiquer l'indicatif du pays que les biens de retour et de CountryName que la propriété à afficher.
OriginalL'auteur Vague | 2016-01-12
Vous devez vous connecter pour publier un commentaire.
La façon dont je fais mes listes déroulantes est un peu similaire, sauf que dans mon ViewModel, ma propriété est de type
SelectList
au lieu d'uneIEnumerable<>
.Puis dans le contrôleur-je obtenir les données et les convertir en une liste anonyme avec deux propriétés “Id” et “Valeur”.
À son tour, je crée un nouveau
SelectList()
passant dans la liste anonyme préciser ce qu'est ladataValueField
et qu'est-ce que ledataTextField
.Enfin, de l'avis:
OriginalL'auteur Vlince
CSHTML(MVC6)
CE CODE CSHTML
OriginalL'auteur Siva Ragu
J'ai proposé une autre façon de faire cela par l'extension de la
SelectTagHelper
avec un peu plus d'attributs qui peuvent rendre ce type de développement plus pratique. La question est débattue ici.Il est basé sur une classe
SelectListDescriptor
qui contiennent la liste des éléments, la propriété à afficher le texte et le champ de valeur, respectivement. Puis, dans la vue d'un type simple<select asp-descriptor="@ViewBag.CountryDescriptor"><option value="">-- Choose country</option<</select>
.Le pays descripteur est juste
new SelectListDescriptor(nameof(Country.CountryCode), nameof(Country.CountryName), countries)
. Cela évite la magie des chaînes en utilisant la puissance de la " nameof-opérateurOriginalL'auteur joacar