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

时间:2013-11-14 18:58:30

标签: 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"));
    }
}

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

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

2 个答案:

答案 0 :(得分: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"));
}

这是一个用于剃刀语法的quick reference。另外,虽然您已经提到这是丢弃代码,但我还是会提到使用view[1] models[2],只是为了确保您了解它们。如果你需要,我可以提供一个简单的例子。

答案 1 :(得分:1)

public function isAuthorized($user) {

    $actions = array("stats","index");
    if (in_array($this->action, $actions)) {
        return true;
    }

return parent::isAuthorized($user);
}