好的,我想从我的对象列表中创建一个DropDownList
这是我的获取对象方法
public List<Category> GetCategoriesList()
{
BaseShopEntities context = new BaseShopEntities();
List<Category> uniqCategories = (from c in context.Category
select c).Distinct().ToList<Category>();
return uniqCategories;
}
我试图将它放入ViewBag
这样:
ViewBag.Categories = proxy.GetCategoriesList().ToList();
如果我只使用分类名称并将其解析为字符串,则没有问题,但我也需要ID
我想获得这样的数据,但不知道如何
@Html.DropDownList("CategoryID", new SelectList(ViewBag.Categories.Name));
答案 0 :(得分:5)
首先,GetCategoriesList
已经返回了一个列表,因此当您将其添加到ViewBag时,您不需要ToList
:
ViewBag.Categories = proxy.GetCategoriesList();
其次,为了创建具有独立名称和值的DropDownList,您需要SelectList
构造函数的以下重载:
SelectList(IEnumerable, String, String)
在这里,您可以指定用于填充SelectList
的列表以及两个字符串,其中第一个是列表中元素的值字段的名称,以及第二个是文本字段的名称。然后使用反射检索这些字段的值。在你的情况下,它可能看起来像这样:
@Html.DropDownList("CategoryID",
new SelectList(ViewBag.Categories, "Id", "Name"));
在此,我假设每个类别都有Id
字段和Name
字段。如果这些字段名称不正确,则您需要相应地更改传递给SelectList
构造函数的字符串。
旁注:您应该为与数据库实体类分开的类别创建单独的视图模型,并创建一个列表。您的观点不应该直接访问您的数据实体。