我遇到的问题是所选值不适用于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属性添加到控件中。
有人可以帮我理解我做错了吗?
答案 0 :(得分:46)
你在这里遇到同样的问题:
问题出在您的ViewBag属性名称中。因为它与模型中的属性相同,所以不起作用。您应该只将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" })
答案 1 :(得分:3)
我尝试了很多东西,但最终让它像这样工作
在控制器中
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);
然后在视图中我只是放了(我在这里也有onchange事件和类下拉列表,但如果你愿意,可以删除它们。)
@Html.DropDownList("tuki_tila", ViewBag.tilalista as SelectList, "-- valitse tila --", new { @onchange = "executeticketsearch();", @class = "haku_dropdowns" })
(抱歉芬兰语中的文字值和变量名,但那些不重要:D)
答案 2 :(得分:2)
我不喜欢你可以使用
的事实@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" })
答案 3 :(得分:1)
首先,您如何填充ViewBag.NewsItemId.Items
?我们没有看到价值来自哪里。
为了使选定的值有效,它必须与集合的元素具有相同的类型。如果item.NewsItemId
的类型为T
,则ViewBag.NewsItemId.Items
必须是IEnumerable<T>
类型(或实现它的任何其他集合类型)。情况似乎并非如此,因为您将NewsItemId
设置为所选值,而您的集合基于NewsItemId.Items
,可能不是同一类型。
答案 4 :(得分:0)
您应该更改DropDownList字段的名称:
@Html.DropDownList("Some_Name_that_does_not_exist_in_model", ViewBag.NewsItemId as SelectList, string.Empty, new { @class = "form-control" })
答案 5 :(得分:0)
将viewbag属性名称更改为其他页面上使用的模型变量名称。
答案 6 :(得分:0)
@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
名称已更改。也改变了控制器。
答案 7 :(得分:0)
我有同样的问题。在下面的示例中,变量ViewData [“ DATA_ACREDITO_MODELO_INTEGRADO”]具有一个SelectListItem列表,该列表具有默认的选定值,但该属性无法直观地反映出来。
// data
var p_estadoAcreditacion = "NO";
var estadoAcreditacion = new List<SelectListItem>();
estadoAcreditacion.Add(new SelectListItem { Text = "(SELECCIONE)" , Value = " " });
estadoAcreditacion.Add(new SelectListItem { Text = "SI" , Value = "SI" });
estadoAcreditacion.Add(new SelectListItem { Text = "NO" , Value = "NO" });
if (!string.IsNullOrEmpty(p_estadoAcreditacion))
{
estadoAcreditacion.First(x => x.Value == p_estadoAcreditacion.Trim()).Selected = true;
}
ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] = estadoAcreditacion;
我通过使DropdownList的第一个参数不同于id属性来解决它。
// error:
@Html.DropDownList("SELECT__ACREDITO_MODELO_INTEGRADO"
, ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] as List<SelectListItem>
, new
{
id = "SELECT__ACREDITO_MODELO_INTEGRADO"
...
// solved :
@Html.DropDownList("DROPDOWNLIST_ACREDITO_MODELO_INTEGRADO"
, ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] as List<SelectListItem>
, new
{
id = "SELECT__ACREDITO_MODELO_INTEGRADO"
...