将Html.DropDownList帮助器与ViewBag列表一起使用

Met*_*hor 2 c# asp.net-mvc razor asp.net-mvc-5

这是代码:

@using SSA.Models;

<h2>@ViewBag.Title.ToString()</h2>

@{
    using(Html.BeginForm()){
        List<SelectListItem> selectList = new List<SelectListItem>();
        foreach(Item c in ViewBag.Items)
        {
            SelectListItem i = new SelectListItem();
            i.Text = c.Name.ToString();
            i.Value = c.SiteID.ToString();
            selectList.Add(new SelectListItem());
        }
        Html.DropDownList("Casinos", new SelectList(selectList,"Value","Text"));
    }
}
Run Code Online (Sandbox Code Playgroud)

断点上的列表selectList显示它有108个值.什么渲染是一个空的形式.没有运行时错误.

注意:我知道使用ViewBag这不是最好的方法.这是丢失的代码,我只想了解为什么它不呈现下拉列表.

Joh*_*n H 6

它不是渲染,因为它全部在剃刀代码块内(即@{ ... }).试试这个:

@{
    List<SelectListItem> selectList = new List<SelectListItem>();
    foreach(Item c in ViewBag.Items)
    {
        SelectListItem i = new SelectListItem();
        i.Text = c.Name.ToString();
        i.Value = c.SiteID.ToString();
        selectList.Add(new SelectListItem());
    }
}

@using (Html.BeginForm())
{
    @Html.DropDownList("Casinos", new SelectList(selectList,"Value","Text"));
}
Run Code Online (Sandbox Code Playgroud)

这是剃刀语法的快速参考.另外,虽然你已经提到这是丢失代码,但我还是会提到使用view [1] 模型[2],只是为了确保你已经意识到它们.如果你需要,我可以提供一个简单的例子.