如何在下拉列表MVC 5中显示不同的列值

时间:2016-08-26 04:58:44

标签: c# asp.net-mvc

所以这是交易,我有一个表审计,这个表包含列“状态”,它指定审计当前状态。现在我正在创建一个搜索此表的视图,其中一个字段将是我想从数据库中获取的状态,并将其显示在下拉列表中供用户选择。

这是我在Controller中创建SelectList的方法:

            ViewBag.Audit_Status = new SelectList(db.Audits, "Audit_Status", "Audit_Status");

当我在视图中创建下拉列表时:

                @Html.DropDownList("Audit_Status", null, htmlAttributes: new { @class = "form-control" })

问题在于我将状态重复,因为很明显有多个审核具有相同的状态。我怎样才能显示不同的状态?

4 个答案:

答案 0 :(得分:1)

在LINQ中使用 distinct

ViewBag.Audit_Status = new SelectList(db.Audits.Select(m => m.Audit_Status).Distinct(), "Audit_Status", "Audit_Status");

对于可选文字:

@Html.DropDownList("Audit_Status", null, "Please specify the Status", htmlAttributes: new { @class = "form-control" })

答案 1 :(得分:1)

感谢@Sandip和@codelahiru

使用Linq查询distinct,因为两者都有注释

ViewBag.Audit_Status = new SelectList(db.Audits.Select (x => x.Audit_Status).Distinct());

但是,当您从一列中选择数据时,您无法指定数据值字段和数据文本字段,如果这样做,视图将引发异常。

答案 2 :(得分:0)

我认为db.Audits是您的状态列表,然后使用linq这样的命令,

ViewBag.Audit_Status = new SelectList(db.Audits.Distinct(), "Audit_Status", "Audit_Status");

或者如果Audits内部有任何属性,例如Status,请使用你的linq,'

ViewBag.Audit_Status = new SelectList(db.Audits.Select(x=>x.Status).Distinct().ToList(), "Audit_Status", "Audit_Status");

答案 3 :(得分:0)

希望这能解决您的问题。

ViewBag.Audit_Status == db.Audits.Select(x => x.Audit_Status)
                                             .Distinct()
                                             .Select(x =>
                                             new SelectList
                                             {
                                                 Text = x,
                                                 Value = x
                                             }).ToList();

或者如果您将在代码中使用linq。然后您可以安装MoreLinq nuget.DistinctBy是MoreLinq中非常有用的扩展之一。

ViewBag.Audit_Status == db.Audits.DistinctBy(x => x.Audit_Status)                                                 
                                             .Select(x =>
                                             new SelectList
                                             {
                                                 Text = x.Audit_Status,
                                                 Value = x.Audit_Status//you can give any value
                                             }).ToList();