项目:
我似乎完全无法以条件方式向选择列表添加第一个条目。
以下是我的代码:
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;
}
在方法中通过行号进行演练:
我之所以想要这样,是因为任何已经拥有身份的公司都不会获得“选择状态”#34;进入,但任何没有进入的公司。但是,我上面的内容不起作用。我已经通过断点确认Guid的空值确实触发了If语句(这样至少起作用)并且IF语句的内容确实被处理了,但是生成的下拉菜单没有&# 34;选择状态"条目。
这一切都位于BaseController中,因为它需要从大量内部页面访问。前端的下拉列表由此BaseController中的ViewBag填充。
帮助?
答案 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>