如何从下拉列表中排除记录

时间:2013-05-15 03:16:46

标签: c# asp.net-mvc asp.net-mvc-4 razor

我的创建视图上有一个下拉列表'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>        

任何解决方案都将不胜感激,谢谢。

4 个答案:

答案 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语句中的必需状态。