1

我的创建视图上有一个下拉列表“状态”,它从数据库中获取数据,这意味着列表中的数据不是硬编码的,而是动态的。目前我在状态表上有 3 条记录(即可用、不可用和已取消)。我想排除 Canceled记录,以便在下拉列表中只有可用和不可用。仍需要取消状态,但以单独的方式使用。这是代码

控制器:

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

4 回答 4

1

var selectList = new SelectList((from s in statList.Where(x=>x.Name =="Available"||x.Name =="Unavailable") select new { statusId = s.Id, statusName =s.Name }), "statusId", "statusName");

你还可以看到except()方法

于 2013-05-15T03:22:09.200 回答
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 属性是一个字符串并且它的值是 Cancelled...

于 2013-05-15T03:27:42.440 回答
1

您的第一步是确定“已取消”与其他状态不同的原因。我建议在您的数据库中添加一列,以指示这些状态中的哪些显示在 UI 中。

正如您所描述的,问题在于您的数据库能够随时更改,您无法硬编码任何特定状态以包含或排除,因为您可能会遇到数据完整性问题。

添加列(只是一个布尔值到 DB,我称之为“userSelectable”)后,您可以在 LINQ 选择语句中排除它:

 var selectList = new SelectList((from s in statList.ToList()
                                  select new { statusId = s.Id, statusName = s.Name }
                                  where userSelectable = true), "statusId", "statusName");
于 2013-05-15T03:33:53.143 回答
0

通过 where 子句排除 Linq 语句中所需的状态。

于 2013-05-15T03:22:12.623 回答