我是C#/ MVC的新手。我有一个包含四个元素的列表(NameID,Name,IsActive和DisplayOrder)。我希望提供一个下拉列表来选择名称,但列表应仅包含IsActive = true
的列表,并根据DisplayOrder
按顺序显示列表。
在视图中创建我有
@Html.DropDownList("NameID");
在控制器中我有
public ActionResult Create()
{
ViewBag.NameID = new SelectList(db.Names, "NameID", "Name");
return View();
}
我想使用类似ViewBag.NameID
和.Where(IsActive=true)
语句的方式将子集/显示顺序信息直接放在.OrderBy(DisplayOrder)
行中,但我无法弄清楚如何做到这一点。
答案 0 :(得分:1)
这属于控制器:
var names = db.Names.Where(n => n.IsActive).OrderBy(n => n.DisplayOrder);
var model = new SelectList(names, "NameID", "Name");
return this.View(model);
在相应的视图中,你应该有类似的代码:
@model SelectList
@Html.DropDownList("someName", Model)
由于您使用的模式称为MVC,其中M代表Model,您应该使用模型而不是ViewBag
在控制器和视图之间传递数据。
答案 1 :(得分:1)
如果您熟悉LINQ语句,实际上很容易实现。
我已经编写了一些示例代码,可以为您清除所有内容。 (希望)
void Main()
{
var members = new List<Member>();
members.Add(new Member() {NameId = 1, Name = "Hank", IsActive = false, DisplayOrder = 3});
members.Add(new Member() {NameId = 2, Name = "Walter", IsActive = true, DisplayOrder = 2});
members.Add(new Member() {NameId = 3, Name = "Jimmy", IsActive = true, DisplayOrder = 1});
members.Add(new Member() {NameId = 4, Name = "Bell", IsActive = false, DisplayOrder = 4});
var myDropDownMembers = members.Where(m => m.IsActive == true).OrderBy(m => m.DisplayOrder);
Console.WriteLine(myDropDownMembers);
}
class Member
{
public Member() {}
public int NameId;
public string Name;
public bool IsActive;
public int DisplayOrder;
}
结果是,
如果您想熟悉LINQ,请查看这两个教程,不要忘记在MSDN上有一个潜行高峰帮助它,