首页 > 解决方案 > 下拉列表中的重复值 - MVC

问题描述

我正在做一个需要从数据库创建下拉列表的项目。下拉列表包括供应商所在的州。但是,下拉列表返回重复值。目的是使用下拉菜单按供应商所在的州过滤供应商。

控制器:

 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.String”不包含名为“State”的属性。

在这一点上,我正在摸索我能做什么。

TLDR:

我正在尝试创建唯一值(状态)的下拉列表。但是,到目前为止,我尝试过的不是创建一个出现多次的状态下拉列表,就是引发异常。

标签: c#asp.net-mvclinq

解决方案


您走在正确的轨道上,但是一旦您选择了状态名称(并使用 Distinct 减少了它),您就不再需要在 SelectList 构造函数中指定数据值和数据文本字段的名称。字符串本身将充当两者。不过,您可能仍然想要一个排序列表。

尝试

public ActionResult Index()
{
    ViewBag.State = new SelectList
        (db.Vendors
        .Select(v => v.State)
        .Distinct()
        .OrderBy(s => s));

    return View(db.Vendors.ToList());
}

推荐阅读