如何从Viewbag项目列表中创建一个选择列表?
本文关键字:列表 一个 选择 创建 Viewbag 项目 | 更新日期: 2023-09-27 18:06:32
我有一个从控制器创建的列表,它被传递给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" })
我得到各种错误。
我花了几个小时尝试不同的组合,不同的铸造等等,但是,我似乎没有取得进展。
我见过很多不同的错误——最常见的是'
没有
IEnumerable<SelectListItem>
类型的ViewData
项有键" test " '
然而,我试着根据不同的问题来选择和改变名字,但是,我似乎就是无法通过这个。
在这一点上,我想只是做一个手动HTML下拉列表和一个foreach
循环的内容,但是,这似乎是浪费。
第二个参数必须是用于填充下拉列表的System.Web.Mvc.SelectListItem
对象的集合。但是,在这种情况下你使用的是ViewBag
属性,它的类型是dynamic
。因此,必须将其强制转换为SelectListItem
的集合。否则,你会在MVC 4+中得到这个错误:
扩展方法不能动态调度
。结果就是改变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>
将为你做这项工作