如何在C#中为MVC创建值为“00”和“”的自己的SelectList?

时间:2012-05-02 18:37:46

标签: asp.net-mvc asp.net-mvc-3

我的行动中有以下代码:

        ViewBag.AccountId = new SelectList(_reference.Get("01")
            .AsEnumerable()
            .OrderBy(o => o.Order), "RowKey", "Value", "00");

在我看来:

@Html.DropDownList("AccountID", null, new { id = "AccountID" })

现在我想动态创建列表,所以在我的操作中,我只想用一个简单的SelectList进行硬编码,其值为:00和“”,这样当我进入我的视图时,我只看到一个空白的选择框。 / p>

有人可以解释我如何在C#中做到这一点。

1 个答案:

答案 0 :(得分:11)

在您的控制器中:

var references = _reference.Get("01").AsEnumerable().OrderBy(o => o.Order);

List<SelectListItem> items = references.Select(r => 
    new SelectListItem()
    {
        Value = r.RowKey,
        Text = r.Value
    }).ToList();

var emptyItem = new SelectListItem(){
    Value = "",
    Text  = "00"
};

// Adds the empty item at the top of the list
items.Insert(0, emptyItem);

ViewBag.AccountIdList = new SelectList(items);

在您看来:

@Html.DropDownList("AccountID", ViewBag.AccountIdList)

注意,无需添加new { id = "AccountId" },因为MVC无论如何都会为ID提供控制权。

修改

如果您只需要一个空的下拉列表,为什么要在控制器中创建一个非空的选择列表?

无论如何,这是你可以做的(视图代码保持不变):

List<SelectListItem> items = new List<SelectListItem>();

var emptyItem = new SelectListItem(){
    Value = "",
    Text  = "00"
};

items.Add(emptyItem);

ViewBag.AccountIdList = new SelectList(items);