[英]LINQ distinct to @Html.DropDownList
好的,我在某些事情上遇到了很多麻烦,我认为这很容易。 我正在尝试使用表中的不同值填充下拉列表。
该linq提供了每个下拉选项所需的部门列表。
IPACS_Master_Lists
.Where (x => (x.Department != null))
.Select (s => s.Department)
.Distinct ()
.Select (v => v)
我该如何制作一个下拉列表?
我试图弄乱@ Html.DropDownList,但似乎无法正常工作。
我的控制器如下。 我试图通过ViewBag传递它,但也无法使其正常工作。
public ActionResult Index()
{
var docs = db.IPACS_Master_List;
ViewBag.Departments = new SelectList(db.IPACS_Master_List.Where(x => (x.department != null)).Select (s => s.department).Distinct().Select (v => v), "id", "department", 0);
return View(docs);
}
不要使用ViewBag
,每次使用它时,小猫都会死亡。
认真地讲,这确实是一个坏习惯。
首先,在您的模型中假设:
public class MyModel
{
public List<Documents> Docs { get; set; } //don't know what type this is
public List<SelectListItem> Departments { get; set; }
public string Department { get; set; } //this holds what you select in the view
}
然后将您的操作更改为:
public ActionResult Index()
{
MyModel model = new MyModel();
model.Docs = db.IPACS_Master_List;
model.Departments = db.IPACS_Master_List
.Where(x => x.department != null)
.Select(s => s.department)
.Distinct()
.Select(s => new SelectListItem
{
Text = s.Name,
Value = s.Name
})
.ToList();
return View(model);
}
然后让您的视图使用模型MyModel
。
然后,您可以执行以下操作:
@Html.DropDownListFor(m => m.Department, Model.Departments)
将您的收藏变成<SelectListItem>
的收藏
var myResult = IPACS_Master_Lists.Where (x => (x.Department != null))
.Select (s => s.Department)
.Distinct ()
.Select (v => new SelectListItem{
Value = v.ResultIdField,
Text = v.ResultNameField
})
然后将其链接到实际的下拉列表:
如果您通过ViewModel传递:
@Html.DropDownListFor(model=>model.SelectedResultId, @Model.myResult ,"- Select One")
如果您要通过ViewBag传递您的收藏集(我会远离this):
@Html.DropDownListFor(model=>model.SelectedResultId, @ViewBag.myResult ,"- Select One")
如果您在视图中根本没有ViewModel,则可以选择另一种选择:
@Html.DropDownList("selectListName", ViewBag.myResult, new {id = "selectListId"})
还要检查我大约一年前在这里问过的问题。 它应该可以帮助您: 无法获取我的DropDownListFor来在下拉菜单中选择一个选定的SelectListItem项目
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.