无法将有条件的第一个条目添加到选择列表下拉菜单

Unable to add conditional first entry to selectlist drop-down menu

项目:

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

下面是我的代码:

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 table。这是一个外键 查找 table.
  2. 获取提供外键的查找 table。
  3. IF 语句:如果 CompanyStatusId 为 null、空白或为空 Guid,添加一个带有空白值的初始 "choose status" 条目。

我想要这个的原因是任何已经有状态的公司都不会获得 "choose status" 条目,但任何没有的公司都会获得条目。但是,我上面的内容不起作用。我已经通过断点确认 Guid 的空值确实会触发 If 语句(这样至少可以工作)并且 IF 语句的内容确实得到处理,但生成的下拉菜单没有 "choose status"条目。

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

帮忙?

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;
}

旁注:通常 "Select a Status" 选项是第一个选项,在这种情况下,您需要使用 status.Insert(0, insertItem);

另请注意,如果您绑定到模型 属性(它被 DropDownListFor()方法。