好的,我觉得应该很容易,我遇到了很多麻烦。我正在尝试使用表中的不同值填充下拉列表。
这个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);
}
答案 0 :(得分:3)
不要使用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)
答案 1 :(得分:1)
将您的收藏集转换为<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传递你的收藏(我会远离这个):
@Html.DropDownListFor(model=>model.SelectedResultId, @ViewBag.myResult ,"- Select One")
如果视图中根本没有ViewModel,则为您提供另一种选择:
@Html.DropDownList("selectListName", ViewBag.myResult, new {id = "selectListId"})
另请查看我在大约一年前问过的问题。它应该会帮助你: Can't get my DropDownListFor to select a selected SelectListItem item in a Dropdown menu