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 point de vue:
@Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, string.Empty,
new { @class = "form-control" })
Cependant, lorsque j'essaie de voir ci-dessous, cela fonctionne:
@Html.DropDownList("NewsItemId", string.Empty)
La procédure ci-dessous fonctionne également, mais comme le nom du champ ne correspond pas au modèle, il ne sera pas publié correctement.
@Html.DropDownList("NewsItemIdDrop",ViewBag.NewsItemId as SelectList, string.Empty,
new { @class = "form-control" })
La raison pour laquelle j'ai besoin d'utiliser la première option est pour pouvoir ajouter l'attribut 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:
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 View
@Html.DropDownList("NewsItemId",ViewBag.NewsItemList as SelectList, string.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 ajouter l'attribut '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, string.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, string.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<SelectListItem>();
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 dans la 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 remplissez-vous ViewBag.NewsItemId.Items
? Nous ne voyons pas d'où viennent les valeurs.
Pour que la valeur sélectionnée fonctionne, elle 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<T>
(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.
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, string.Empty,
new { @class = "form-control" })
changer à
@Html.DropDownList("NewsItemId", ViewBag.NewsItemIdList as SelectList, string.Empty,
new { @class = "form-control" })
ViewBag.NewsItemIdList
nom changé. change également de contrôleur.
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, string.Empty, new { @class = "form-control" })