dans le menu déroulant de la liaison dans MVC, j'obtiens toujours cette erreur. Il n'y a pas d'élément ViewData de type 'IEnumerable' pays qui a la clé que je ne sais pas comment le trier.
Vue
@Html.DropDownList("country",
(IEnumerable<SelectListItem>)ViewBag.countrydrop,"Select country")
Manette
List<Companyregister> coun = new List<Companyregister>();
coun = ds.getcountry();
List<SelectListItem> item8 = new List<SelectListItem>();
foreach( var c in coun )
{
item8.Add(new SelectListItem
{
Text = c.country,
Value = c.countryid.ToString()
});
}
ViewBag.countrydrop = item8;
return View();
je ne sais pas où je me trompe, quelqu'un peut-il m'aider à l'avance
Dans votre action, changez ViewBag.countrydrop = item8
en ViewBag.country = item8;
et dans Vue, écrivez comme ceci:
@Html.DropDownList("country",
(IEnumerable<SelectListItem>)ViewBag.country,
"Select country")
En fait quand tu écris
@ Html.DropDownList ("country", (IEnumerable) ViewBag.country, ". Sélectionnez un pays")
ou
Html.DropDownList ("pays", "sélection du pays)
il recherche IEnumerable<SelectListItem>
dans ViewBag
avec la clé pays, vous pouvez également utiliser cette surcharge dans ce cas:
@Html.DropDownList("country","Select country") // it will look for ViewBag.country and populates dropdown
Si vous utilisiez DropDownListFor
comme ceci:
@Html.DropDownListFor(m => m.SelectedItemId, Model.MySelectList)
où MySelectList
dans le modèle était une propriété de type SelectList
, cette erreur pouvait être levée si la propriété était null
.
Evitez cela en l'initialisant dans le constructeur, comme ceci:
public MyModel()
{
MySelectList = new SelectList(new List<string>()); // empty list of anything...
}
Je sais que ce n'est pas le cas du PO, mais cela pourrait aider quelqu'un comme moi qui avait la même erreur à cause de cela.
Notez qu'une liste de sélection est publiée comme nulle. Par conséquent, votre erreur indique que la propriété viewdata est introuvable.
Réinitialisez toujours votre liste de sélection dans une action POST.
Pour plus d'explications: Persist SelectList dans le modèle sur Post
utilisez ceci
var list = new SelectList(countryList, "Id", "Name");
ViewBag.countries=list;
@Html.DropDownList("countries",ViewBag.Roles as SelectList)
votre code est correct car dans certains cas cela ne fonctionne pas, je ne sais pas non plus d'où provient l'erreur mais cela peut vous aider à résoudre le problème, déplacez le code dans la tête de la vue comme ceci:
index.cshtml:
@using expert.Models;
@{
ViewBag.Title = "Create";
Layout = "~/Views/Shared/_Layout.cshtml";
Manager db = new Manager();
ViewBag.FORM_PRESTATION = new SelectList(db.T_BDE_PRESTATION_PRES.OrderBy(p => p.PRES_INTITULE).Where(p => p.T_B_PRES_ID == null), "PRES_ID", "PRES_INTITULE");
}
<div class="form-group">
<label class = "w3-blue" style ="text-shadow:1px 1px 0 #444">Domaine:</label>
<div class="col-md-10">
@Html.DropDownList("FORM_PRESTATION", null, htmlAttributes: new { @class = "w3-select ", @required = "true" })
</div>
</div>
Dans mon cas, l'erreur est survenue parce que je n'avais pas initialisé la liste de sélection dans le contrôleur comme ceci:
viewModel.MySelectList = new List<System.Web.Mvc.SelectListItem>();
Comme aucune des réponses existantes ne l’a expliqué clairement, je l’affiche. Peut-être que cela aide n'importe qui.
essaye ça
@Html.DropDownList("ddlcountry",(List<SelectListItem>)ViewBag.countrydrop,"Select country")
Dans le contrôleur
ViewBag.countrydrop = ds.getcountry().Select(x => new SelectListItem { Text = x.country, Value = x.countryid.ToString() }).ToList();
Essaye ça.
Manette:
List<CountryModel> countryList = db.countryTable.ToList();
ViewBag.Country = new SelectList(countryList, "Country", "CountryName");
J'ai eu le même problème et j'ai trouvé la solution que je devrais mettre le code pour récupérer la liste déroulante de la base de données dans la méthode d'édition. Cela a fonctionné pour moi . Solution au problème similaire