下拉列表中的重复值 - MVC

Posted

技术标签:

【中文标题】下拉列表中的重复值 - MVC【英文标题】:Repeating Values in Dropdown List- MVC 【发布时间】:2021-12-13 01:53:55 【问题描述】:

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

控制器:

 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:

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

【问题讨论】:

【参考方案1】:

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

试试

public ActionResult Index()

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

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

【讨论】:

做到了!谢谢!

以上是关于下拉列表中的重复值 - MVC的主要内容,如果未能解决你的问题,请参考以下文章

如何将选定的下拉列表值与 MVC 中的模型属性进行比较

MVC 5下拉列表用于编辑视图中的多选值绑定

如何使用C#从asp.net MVC中的枚举绑定下拉列表[重复]

使下拉列表依赖于 MVC Core 中的另一个下拉列表

如何从下拉列表中设置默认值[重复]

根据上一个列表中选择的值填充下拉列表(asp.net mvc3)