C# 如何在视图上的选择元素中显示从控制器到视图的简单列表?

C# 如何在视图上的选择元素中显示从控制器到视图的简单列表?,c#,html,asp.net-mvc,razor,C#,Html,Asp.net Mvc,Razor,每当我尝试以下代码时,我的应用程序似乎工作正常: 视图:Index.cshtml 但我不希望视图中出现这样的列表的任何逻辑。相反,我希望控制员处理以下事项: 控制器:SelectionController.cs 每当我尝试调用视图中的ViewBag.listItems时,例如: @Html.DropDownListname,ViewBag.listItems 这将返回一个错误: “HtmlHelper”没有名为“DropDownList”的适用方法,但似乎有一个同名的扩展方法。无法动态调度扩展方

每当我尝试以下代码时,我的应用程序似乎工作正常:

视图:Index.cshtml

但我不希望视图中出现这样的列表的任何逻辑。相反,我希望控制员处理以下事项:

控制器:SelectionController.cs

每当我尝试调用视图中的ViewBag.listItems时,例如:

@Html.DropDownListname,ViewBag.listItems

这将返回一个错误:

“HtmlHelper”没有名为“DropDownList”的适用方法,但似乎有一个同名的扩展方法。无法动态调度扩展方法。考虑在不使用扩展方法语法的情况下强制转换动态参数或调用扩展方法。 我如何处理这个问题

编辑:

使用:@Html.DropDownListname,选择List ViewBag.listItems

将导致:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:无法将System.Collections.Generic.List的类型转换为System.Web.Mvc.SelectList

您可以将ViewBag.Item传递到下拉列表中

@Html.DropDownList("name", new SelectList(ViewBag.listItems, "Value", "Text"))


你得把它扔给我SelectList@TetsuyaYamamoto我想要一个简单的例子,从控制器传递列表到视图,不要使用任何奇怪的查询、数据库或模型之类的东西,这些东西可能会吓到读者。每当有人提出类似问题时,标题就更清晰了。也不一定与MVC3相关。@Barrosy您的问题和引用的问题本质上是相同的,因为两者都意味着您不应该直接在DropDownList helper中使用ViewBag。相反,您需要强制转换为SelectList或IEnumerable类型。@TetsuyaYamamoto请参阅我的编辑。但是,我建议创建一个视图模型并将其传递给视图,尽量避免使用ViewBag,因为维护动态变量很麻烦。显然,对于第一个选项,SelectListItem类的bool Disabled属性似乎工作不正常,从我所读到的内容来看,必须指出,在尝试使用SelectListItem时,引用的是类型为SelectListItem的IEnumerable。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace ExampleMVC.Controllers
{
    public class SelectionController : Controller
    {
        // GET: Selection
        public ActionResult Index()
        {
            //For first dropdown:
            List<SelectListItem> optionList1 = new List<SelectListItem>();
            optionList1.Add(new SelectListItem
            {
                Text = "Option 1",
                Value = "Option 1"
            });
            optionList1.Add(new SelectListItem
            {
                Text = "Option 2",
                Value = "Option 2"
            });
            optionList1.Add(new SelectListItem
            {
                Text = "Option 3",
                Value = "Option 3"
            });

            //For second dropdown:
            List<SelectListItem> optionList2 = new List<SelectListItem>();
            optionList1.Add(new SelectListItem
            {
                Text = "Option 1",
                Value = "Option 1"
            });
            optionList1.Add(new SelectListItem
            {
                Text = "Option 2",
                Value = "Option 2"
            });
            optionList1.Add(new SelectListItem
            {
                Text = "Option 3",
                Value = "Option 3"
            });


            List<SelectList> optionList3 = new List<SelectList>();
            optionList1.Add(new SelectListItem
            {
                Text = "Option 4",
                Value = "Option 4"
            });
            optionList1.Add(new SelectListItem
            {
                Text = "Option 5",
                Value = "Option 5"
            });
            optionList1.Add(new SelectListItem
            {
                Text = "Option 6",
                Value = "Option 6"
            });

            List<SelectListItem> listItems = new List<SelectListItem>();
            listItems.Add(new SelectListItem
            {
                Text = "Exemplo1",
                Value = "Exemplo1"
            });
            listItems.Add(new SelectListItem
            {
                Text = "Exemplo2",
                Value = "Exemplo2",
                Selected = true
            });
            listItems.Add(new SelectListItem
            {
                Text = "Exemplo3",
                Value = "Exemplo3"
            });
            ViewBag.listItems = listItems;

            ViewBag.optionList1 = optionList1;
            ViewBag.optionList2 = optionList2;
            ViewBag.optionList3 = optionList3;
            return View();
        }
    }
}
@Html.DropDownList("name", new SelectList(ViewBag.listItems, "Value", "Text"))
@Html.DropDownList("name", (IEnumerable<SelectListItem>)ViewBag.listItems)