无法将有条件的第一个条目添加到选择列表下拉菜单
Unable to add conditional first entry to selectlist drop-down menu
项目:
- 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;
}
在方法中通过行号演练:
- 从公司获取 CompanyStatusId table。这是一个外键
查找 table.
- 获取提供外键的查找 table。
- 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()
方法。
项目:
- 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;
}
在方法中通过行号演练:
- 从公司获取 CompanyStatusId table。这是一个外键 查找 table.
- 获取提供外键的查找 table。
- 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()
方法。