web-dev-qa-db-fra.com

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

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?

17
Paul Peat

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 View

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

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" })
2
Tracy P

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)

2
Juho Honkala

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.

1
Réda Mattar

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

0
Seliya Hilal
@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.

0
Seliya Hilal

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" })
0
user241841