如何从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循环的内容,但是,这似乎是浪费。

有谁知道我做错了什么吗?

如何从Viewbag项目列表中创建一个选择列表?

第二个参数必须是用于填充下拉列表的System.Web.Mvc.SelectListItem对象的集合。但是,在这种情况下你使用的是ViewBag属性,它的类型是dynamic。因此,必须将其强制转换为SelectListItem的集合。否则,你会在MVC 4+中得到这个错误:

扩展方法不能动态调度

。结果就是改变ViewBag.PTL2ViewBag.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>

将为你做这项工作