Html.DropDownList La valeur sélectionnée ne fonctionne pas (utilisation du constructeur avec IEnumberable

J’ai un problème où la valeur sélectionnée ne fonctionne pas pour la méthode d’assistance Html.DropDownList. Voir ci-dessous:

Ceci est mon contrôleur:

public ActionResult Edit(int id = 0) { NewsEvent item = GetItem(id); ViewBag.NewsItemId = new SelectList(ViewBag.NewsItemId.Items, "Id", "Name", item.NewsItemId); return View(item); } 

Ceci est mon sharepoint vue:

 @Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, ssortingng.Empty, new { @class = "form-control" }) 

Cependant, lorsque j’essaie de voir ci-dessous, cela fonctionne:

 @Html.DropDownList("NewsItemId", ssortingng.Empty) 

Le texte ci-dessous fonctionne également, mais comme le nom du champ ne correspond pas au modèle, il ne sera pas posté correctement.

 @Html.DropDownList("NewsItemIdDrop",ViewBag.NewsItemId as SelectList, ssortingng.Empty, new { @class = "form-control" }) 

La raison pour laquelle j’ai besoin d’utiliser la première option est pour pouvoir append l’atsortingbut de classe au contrôle.

Est-ce que quelqu’un pourrait m’aider à comprendre ce que je fais mal?

Vous avez le même problème ici:

DropDownListFor Pas de sélection de valeur

Le problème est dans le nom de votre propriété ViewBag. Comme il est identique à votre propriété dans Model, cela ne fonctionnera pas. Vous devriez simplement changer le nom de votre accessoire ViewBag en quelque chose d’autre, comme:

 ViewBag.NewsItemList = new SelectList(ViewBag.NewsItemId.Items, "Id", "Name", item.NewsItemId); 

et sur Voir

 @Html.DropDownList("NewsItemId",ViewBag.NewsItemList as SelectList, ssortingng.Empty, new { @class = "form-control" }) 

Je n’ai pas aimé le fait que vous puissiez utiliser

 @Html.DropDownList("NewsItemID") 

et il fonctionne. Ensuite, vous devez append l’atsortingbut ‘class’ et tout à coup, il se brise. J’ai vu un endroit travailler et un autre ne pas fonctionner avec la syntaxe

 @Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, ssortingng.Empty, new { @class = "form-control" }) 

Lorsque j’ai étudié cela, j’ai déterminé que ViewBag.NewsItemId était en réalité un null dans la vue. Donc, une syntaxe de travail, avec les champs Model et ViewBag ayant le même nom est

 @Html.DropDownList("NewsItemId", null, ssortingng.Empty, new { @class = "form-control" }) 

J’ai essayé beaucoup de choses mais j’ai finalement réussi à le faire fonctionner comme ça

Dans le contrôleur

 int valittu_tila = 1; var tapahtumantilat = new List(); tapahtumantilat.Add(new SelectListItem { Text = "Tapahtumaa kirjataan", Value = "0" }); tapahtumantilat.Add(new SelectListItem { Text = "Odottaa jonossa", Value = "1"}); tapahtumantilat.Add(new SelectListItem { Text = "Tapahtumaa käsitellään", Value = "2"}); ViewBag.tilalista = new SelectList(tapahtumantilat, "Value", "Text", valittu_tila); 

Et puis en vue je viens de mettre (j’ai l’événement onchange et la classe pour la liste déroulante aussi ici mais vous pouvez les supprimer si vous voulez).

 @Html.DropDownList("tuki_tila", ViewBag.tilalista as SelectList, "-- valitse tila --", new { @onchange = "executeticketsearch();", @class = "haku_dropdowns" }) 

(Désolé pour le finnois dans les valeurs de texte et les noms de variables, mais cela ne devrait pas importer: D)

Tout d’abord, comment ViewBag.NewsItemId.Items -vous ViewBag.NewsItemId.Items ? Nous ne voyons pas d’où viennent les valeurs.

Afin de faire fonctionner une valeur sélectionnée, celle-ci doit être du même type que les éléments de vos collections. Si item.NewsItemId est de type T , ViewBag.NewsItemId.Items doit être de type IEnumerable (ou de tout autre type de collection l’implémentant). Cela ne semble pas être le cas, car vous définissez NewsItemId comme valeur sélectionnée alors que votre collection est basée sur NewsItemId.Items qui peut ne pas être du même type.

Vous devriez changer le nom même du champ de votre DropDownList:

 @Html.DropDownList("Some_Name_that_does_not_exist_in_model", ViewBag.NewsItemId as SelectList, ssortingng.Empty, new { @class = "form-control" }) 

changez le nom de la propriété viewbag en un autre nom que celui de la variable de modèle utilisé sur la page.

 @Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, ssortingng.Empty, new { @class = "form-control" }) 

changer à

 @Html.DropDownList("NewsItemId", ViewBag.NewsItemIdList as SelectList, ssortingng.Empty, new { @class = "form-control" }) 

ViewBag.NewsItemIdList nom de ViewBag.NewsItemIdList modifié. change également de contrôleur.