【问题标题】:Using Html.DropDownList helper with a ViewBag list将 Html.DropDownList 助手与 ViewBag 列表一起使用
【发布时间】:2013-11-14 18:58:29
【问题描述】:

这是代码:

@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"));
    }
}

断点上的列表 selectList 显示它有 108 个值。呈现的是一个空表单。没有运行时错误。

注意:我知道为此使用 ViewBag 并不是最好的方法。这是一次性代码,我只是想了解它为什么不呈现下拉菜单。

【问题讨论】:

  • 为什么不在服务器端构建 ViewBag。然后,您可以简单地在下拉列表中引用它。 ViewBag.Casinos= new SelectList(Your IEnumerableList Here, "Values", "Values");然后,您的视图将看起来像这样 Html.DropDownList("Casinos", String.Empty)

标签: c# asp.net-mvc razor asp.net-mvc-5


【解决方案1】:

它没有渲染,因为它都在一个剃刀代码块内(即@{ ... })。试试这个:

@{
    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"));
}

这里有一个quick reference 用于剃刀语法。此外,尽管您提到这是一次性代码,但我还是会提到使用 view[1] models[2],以确保您了解它们。如果您需要,我可以提供一个简单的示例。

【讨论】:

  • 感谢您的回答并指出 ViewModel 的好处。我知道它的价值和好处,只是不希望这个练习增加复杂性。
  • @Metaphor 没问题,我完全明白。只是想确定一下。
【解决方案2】:
@{
   IEnumerable<MyItemType> CDrop = ViewBag.Cat;


        List<SelectListItem> selectList = new List<SelectListItem>();
        foreach (var c in CDrop)
        {
            SelectListItem i = new SelectListItem();
            i.Text = c.Decsription.ToString();
            i.Value = c.TypeID.ToString();
            selectList.Add(i);
        }

}

}

    then some where in your view. 

    @Html.DropDownList("name", new SelectList(selectList, "Value","Text"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多