web-dev-qa-db-fra.com

Il n'y a pas d'élément ViewData de type 'IEnumerable <SelectListItem>' ayant le pays clé

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

16
dazzling kumar

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

Voir Exemple de démonstration de travail

16
Ehsan Sajjad

Si vous utilisiez DropDownListFor comme ceci:

@Html.DropDownListFor(m => m.SelectedItemId, Model.MySelectList)

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.

11
Alisson

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

2
StackExchanger

utilisez ceci 

 var list = new SelectList(countryList, "Id", "Name");
 ViewBag.countries=list;
 @Html.DropDownList("countries",ViewBag.Roles as SelectList)
1
M.Azad

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>
0
karim-225

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.

0
AGuyCalledGerald

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();
0
Manish Sharma

Essaye ça.

Manette:

List<CountryModel> countryList = db.countryTable.ToList();
ViewBag.Country = new SelectList(countryList, "Country", "CountryName");
0
Bhavi

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

0
Barakat