我的创建视图上有一个下拉列表'Status',它从数据库中获取数据,这意味着列表中的数据不是硬编码的,而是动态的。目前我在状态表上有3条记录(即可用,不可用和已取消)。我想排除已取消的记录,以便在下拉列表中我只有可用和不可用。取消状态仍然需要,但以单独的方式使用。这是代码
控制器:
public ActionResult Create(int roomId)
{
var room = _db.Rooms.Single(r => r.Id == roomId);
ViewBag.roomCode = room.RoomCode;
var statList = _db.ReservationsStatus.ToList();
var selectList = new SelectList((from s in statList.ToList()
select new { statusId = s.Id, statusName = s.Name }), "statusId", "statusName");
ViewData["sList"] = selectList;
return View();
}
查看:
<div class="editor-field">
@Html.DropDownList("ddStatus", (SelectList)ViewData["sList"])
</div>
任何解决方案都将不胜感激,谢谢。
答案 0 :(得分:1)
var selectList = new SelectList((来自statList.Where中的s(x =&gt; x.Name ==“可用”|| x.Name ==“不可用”) 选择新的{statusId = s.Id,statusName = s.Name}),“statusId”,“statusName”);
你也可以看到Except()方法
答案 1 :(得分:1)
var selectList = new SelectList((from s in statList.ToList() where s.Name != "Cancelled" select new { statusId = s.Id, statusName = s.Name }), "statusId", "statusName")
...假设您的Name属性是一个字符串,其值为Canceled ...
答案 2 :(得分:1)
您的第一步是确定“已取消”与其他状态不同的原因。我建议在数据库中添加一列,以指示在UI中显示哪些状态。
正如您所描述的那样,问题在于您的数据库可以随时更改,您无法对任何特定状态进行硬编码以包含或排除,因为您可能会遇到数据完整性问题。
添加列(只是一个布尔值到DB,我称之为“userSelectable”)后,您可以在LINQ select语句中将其排除:
var selectList = new SelectList((from s in statList.ToList()
select new { statusId = s.Id, statusName = s.Name }
where userSelectable = true), "statusId", "statusName");
答案 3 :(得分:0)
通过where子句排除Linq语句中的必需状态。