无法将条件优先条目添加到选择列表下拉菜单

时间:2016-03-04 04:09:46

标签: asp.net-mvc linq lambda asp.net-mvc-5 selectlist

项目:

  • ASP.NET 4.5.2
  • MVC 5

我似乎完全无法以条件方式向选择列表添加第一个条目。

以下是我的代码:

public SelectList getStatus(Guid company) {
  var statusValue = db.Company.Where(x => x.CompanyId.Equals(company)).Select(x => new { CompanyStatusId = x.CompanyStatusId }).SingleOrDefault();
  var statusList = db.CompanyStatus.Select(x => new { CompanyStatusId = x.CompanyStatusId, CompanyStatusName = x.CompanyStatusName }).ToList();
  var status = new SelectList(statusList, "CompanyStatusId", "CompanyStatusName", statusValue);
  if(statusValue.CompanyStatusId.Equals(Guid.Empty) || statusValue.CompanyStatusId.Equals(null)) {
    var insertItem = new SelectListItem { Value = "", Text = " « ‹ Select a Status › » " };
    status.ToList().Add(insertItem);
  }
  return status;
}

在方法中通过行号进行演练:

  1. 从公司表中获取CompanyStatusId。这是一个外键 查找表。
  2. 获取提供外键的查找表。
  3. IF语句:如果CompanyStatusId为null或空白或为空 Guid,添加一个初始"选择状态"具有空白值的条目。
  4. 我之所以想要这样,是因为任何已经拥有身份的公司都不会获得“选择状态”#34;进入,但任何没有进入的公司。但是,我上面的内容不起作用。我已经通过断点确认Guid的空值确实触发了If语句(这样至少起作用)并且IF语句的内容确实被处理了,但是生成的下拉菜单没有&# 34;选择状态"条目。

    这一切都位于BaseController中,因为它需要从大量内部页面访问。前端的下拉列表由此BaseController中的ViewBag填充。

    帮助?

1 个答案:

答案 0 :(得分:2)

status.ToList().Add(insertItem);首先生成新的List<SelectListItem>并向其添加insertItem。它不会改变原始的SelectList。要使其工作,请将方法更改为

public List<SelectListItem> getStatus(Guid company) // change signature
{
    var statusValue = db.Company.Where(x => x.CompanyId.Equals(company)).Select(x => new { CompanyStatusId = x.CompanyStatusId }).SingleOrDefault();
    var statusList = db.CompanyStatus.Select(x => new { CompanyStatusId = x.CompanyStatusId, CompanyStatusName = x.CompanyStatusName }).ToList();
    var status = new SelectList(statusList, "CompanyStatusId", "CompanyStatusName", statusValue).ToList(); // change
    if(statusValue.CompanyStatusId.Equals(Guid.Empty) || statusValue.CompanyStatusId.Equals(null))
    {
        var insertItem = new SelectListItem { Value = "", Text = " « ‹ Select a Status › » " };
        status.Add(insertItem); // change
    }
    return status;
}

旁注:通常情况下,“选择状态”选项是第一个选项,在这种情况下,您需要使用status.Insert(0, insertItem);

另请注意,如果绑定到模型属性(由SelectList方法忽略,则无法在statusValue构造函数中添加最后一个参数(即DropDownListFor())。 / p>