我正在做一个项目,我需要从数据库中创建一个下拉菜单。下拉列表包括供应商所在的州。但是,下拉菜单返回重复的值。目的是使用下拉菜单根据供应商所在的州来过滤供应商。
控制器:
public ActionResult Index()
{
ViewBag.State = new SelectList
(db.Vendors
.OrderBy(v => v.State)
.Distinct(),
"State", "State");
return View(db.Vendors.ToList());
}
视图:
@Html.DropDownList("State", null, "Select State", htmlAttributes: new { @class = "nav-link active", @onchange = "FillByState()" })
我已经尝试了我在这里找到的其他解决方案,似乎有类似的问题。
我在控制器中尝试了这个:
public ActionResult Index()
{
ViewBag.State = new SelectList
(db.Vendors
.Select(v => v.State)
.Distinct(),
"State", "State");
return View(db.Vendors.ToList());
}
但是这引发了下面的异常:
异常详细信息:System. web . httpexception: DataBinding: 'System. net . '字符串'不包含名为'State'的属性。
此时此刻,我真不知道该怎么办。
TLDR:
我正在尝试创建一个唯一值(状态)的下拉列表。然而,到目前为止,我所尝试的要么创建一个不止一次出现的状态下拉菜单,要么抛出一个异常。
您在正确的轨道上,但是一旦您选择了状态名(并使用Distinct减少了它),您就不再需要在SelectList构造函数中为数据值和数据文本字段指定名称。字符串本身将充当两者的角色。你可能仍然需要一个排序列表。
试
public ActionResult Index()
{
ViewBag.State = new SelectList
(db.Vendors
.Select(v => v.State)
.Distinct()
.OrderBy(s => s));
return View(db.Vendors.ToList());
}