DropDownList来自Objects MVC

Dox*_*Dox 5 asp.net-mvc html-select tolist razor viewbag

好的,所以我想DropDownList从我的对象列表中创建一个是我的获取对象方法

public List<Category> GetCategoriesList()
{
    BaseShopEntities context = new BaseShopEntities();
    List<Category> uniqCategories = (from c in context.Category
                                             select c).Distinct().ToList<Category>();

    return uniqCategories;
}
Run Code Online (Sandbox Code Playgroud)

我试图把它变成ViewBag这样:

ViewBag.Categories = proxy.GetCategoriesList().ToList();
Run Code Online (Sandbox Code Playgroud)

如果我只使用Categorys的名称并将其解析为字符串没有问题,但我也需要ID

我想得到这样的数据,但不知道如何

@Html.DropDownList("CategoryID", new SelectList(ViewBag.Categories.Name));
Run Code Online (Sandbox Code Playgroud)

Ant*_*t P 5

首先,GetCategoriesList已经返回一个List,所以ToList当你将它添加到ViewBag时你不需要:

ViewBag.Categories = proxy.GetCategoriesList();
Run Code Online (Sandbox Code Playgroud)

其次,为了创建具有独立名称和值的DropDownList,您需要SelectList构造函数的以下重载:

SelectList(IEnumerable, String, String)
Run Code Online (Sandbox Code Playgroud)

在这里,您可以指定用于填充SelectList以及两个字符串的列表,其中第一个是列表中元素的字段的名称,第二个是文本字段的名称.然后使用反射检索这些字段的值.在你的情况下,它可能看起来像这样:

@Html.DropDownList("CategoryID",
    new SelectList(ViewBag.Categories, "Id", "Name"));
Run Code Online (Sandbox Code Playgroud)

在这里,我假设每个类别都有一个Id字段和一个Name字段.如果这些字段名称不正确,则需要相应地更改传递给SelectList构造函数的字符串.

旁注:您应该为与数据库实体类分开的类别创建单独的视图模型,并创建一个列表.您的观点不应直接访问您的数据实体.