Html.DropDownList选择的值不起作用(使用带有IEnumberable 的构造函数)

我有一个问题,其中所选值不适用于Html.DropDownList帮助器方法。 见下文:

这是我的控制器:

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

这是我的观点:

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

但是,当我在视图中尝试以下操作时,它可以工作:

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

以下也可以,但由于字段名称与模型不匹配,因此无法正确发布。

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

我需要使用第一个选项的原因是我可以将class属性添加到控件。

有人能帮助我理解我做错了什么吗?

你有同样的问题:

DropDownListFor不选择值

问题出在您的ViewBag属性名称中。 因为它与Model中的属性相同,所以不起作用。 您应该只将ViewBag道具的名称更改为其他名称,例如:

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

并在视图上

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

我不喜欢你可以使用的事实

 @Html.DropDownList("NewsItemID") 

它的工作原理。 然后你需要添加’class’属性,突然间它就会中断。 我看到一个地方在工作,另一个地方没有使用语法

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

当我研究这个时,我确定ViewBag.NewsItemId实际上是视图中的null。 因此,使用具有相同名称的Model和ViewBag字段的工作语法是

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

我尝试了很多东西,但最终让它像这样工作

在控制器中

 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); 

然后在视图中我只是放(我在这里也有onchange事件和类下拉,但如果你愿意,你可以删除它们)。

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

(抱歉芬兰语的文本值和变量名称,但那些应该无关紧要:D)

首先,如何填充ViewBag.NewsItemId.Items ? 我们没有看到价值观的来源。

为了使选定值有效,它必须与集合的元素具有相同的类型。 如果item.NewsItemId的类型为T ,则ViewBag.NewsItemId.Items必须是IEnumerable类型(或实现它的任何其他集合类型)。 情况似乎并非如此,因为您将NewsItemId设置为所选值,而您的集合基于可能不是同一类型的NewsItemId.Items

您应该更改DropDownList字段的名称:

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

将viewbag属性名称更改为其他页面上使用的模型变量名称。

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

改成

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

ViewBag.NewsItemIdList名称已更改。 也改变了控制器。