如何从 Viewbag 项目列表中创建 select 列表?
How do I make a select list from a Viewbag item list?
我有一个从传递到 viewbag 项目的控制器创建的列表:
List<SelectListItem> PTL = new List<SelectListItem>();
List<PT> PTL2 = db.PT.ToList();
foreach (var item in PTL2)
{
PTL.Add(new SelectListItem { Value = item.ID.ToString(), Text = item.Name });
}
ViewBag.PTL2 = PTL2;
然后,在视图中,我尝试了另一个问题中的以下内容:
@Html.DropDownList("test", new SelectListItem[]{
new SelectListItem() {Text = "Exemplo1", Value="Exemplo1"},
new SelectListItem() {Text = "Exemplo2", Value="Exemplo2"},
new SelectListItem() {Text = "Exemplo3", Value="Exemplo3"}}
, htmlAttributes: new { @class = "form-control" })
效果很好,但是,如果我尝试将其编辑为以下内容:
@Html.DropDownList("test", ViewBag.PTL2, htmlAttributes: new { @class = "form-control" })
我遇到各种错误。
我花了几个小时尝试不同的组合、不同的演员等等,但是,我似乎没有取得进展。
我见过很多不同的错误 - 最常见的错误是'
There is no ViewData
item of type IEnumerable<SelectListItem>
that
has the key “test”'
但是,我尝试根据此处的不同问题强制转换和更改名称,但是,我似乎无法克服这个问题。
在这一点上,我正在考虑制作一个手动 HTML 下拉列表和一个 foreach
内容循环,但是,这似乎是一种浪费。
有人知道我做错了什么吗?
第二个参数必须是用于填充下拉列表的 System.Web.Mvc.SelectListItem
个对象的集合。但是,在这种情况下,您使用的是 ViewBag
属性,并且其类型是 dynamic
。因此,您必须将其转换为 SelectListItem
的集合。否则,您将在 MVC 4+ 中收到此错误:
Extension methods cannot be dynamically dispatched
所以。结果只是改变
ViewBag.PTL2
到
ViewBag.PTL2 as IEnumerable<SelectListItem>
.
我希望现在还不算太晚,这就是我使用 .net Core 的方式
在你的控制器中,使用下面的代码
public ActionResult ShowCalendar()
{
var programs = new Microsoft.AspNetCore.Mvc.Rendering.SelectList((new Programs().GetAll().ToList(), "ID", "Name")
ViewBag.AllItems = programs;
return View();
}
并在您的 cshtml 文件中使用以下内容
<select id="ItemID" class="form-control"
asp-items="ViewBag.AllItems">
<option disabled selected>--- @Localizer["PleaseSelect"] ---</option>
</select>
将为您代劳
我有一个从传递到 viewbag 项目的控制器创建的列表:
List<SelectListItem> PTL = new List<SelectListItem>();
List<PT> PTL2 = db.PT.ToList();
foreach (var item in PTL2)
{
PTL.Add(new SelectListItem { Value = item.ID.ToString(), Text = item.Name });
}
ViewBag.PTL2 = PTL2;
然后,在视图中,我尝试了另一个问题中的以下内容:
@Html.DropDownList("test", new SelectListItem[]{
new SelectListItem() {Text = "Exemplo1", Value="Exemplo1"},
new SelectListItem() {Text = "Exemplo2", Value="Exemplo2"},
new SelectListItem() {Text = "Exemplo3", Value="Exemplo3"}}
, htmlAttributes: new { @class = "form-control" })
效果很好,但是,如果我尝试将其编辑为以下内容:
@Html.DropDownList("test", ViewBag.PTL2, htmlAttributes: new { @class = "form-control" })
我遇到各种错误。
我花了几个小时尝试不同的组合、不同的演员等等,但是,我似乎没有取得进展。
我见过很多不同的错误 - 最常见的错误是'
There is no
ViewData
item of typeIEnumerable<SelectListItem>
that has the key “test”'
但是,我尝试根据此处的不同问题强制转换和更改名称,但是,我似乎无法克服这个问题。
在这一点上,我正在考虑制作一个手动 HTML 下拉列表和一个 foreach
内容循环,但是,这似乎是一种浪费。
有人知道我做错了什么吗?
第二个参数必须是用于填充下拉列表的 System.Web.Mvc.SelectListItem
个对象的集合。但是,在这种情况下,您使用的是 ViewBag
属性,并且其类型是 dynamic
。因此,您必须将其转换为 SelectListItem
的集合。否则,您将在 MVC 4+ 中收到此错误:
Extension methods cannot be dynamically dispatched
所以。结果只是改变
ViewBag.PTL2
到
ViewBag.PTL2 as IEnumerable<SelectListItem>
.
我希望现在还不算太晚,这就是我使用 .net Core 的方式 在你的控制器中,使用下面的代码
public ActionResult ShowCalendar()
{
var programs = new Microsoft.AspNetCore.Mvc.Rendering.SelectList((new Programs().GetAll().ToList(), "ID", "Name")
ViewBag.AllItems = programs;
return View();
}
并在您的 cshtml 文件中使用以下内容
<select id="ItemID" class="form-control"
asp-items="ViewBag.AllItems">
<option disabled selected>--- @Localizer["PleaseSelect"] ---</option>
</select>
将为您代劳