我正在尝试,无法显示用户尚未拥有的所有单位的下拉列表。所以我有列表A包含所有单位,列表B包含用户拥有的所有单位。我想要的是列表C,它基本上是列表A,其中列表B被删除。到目前为止,我已设法过滤掉数据但我似乎无法在我的视图中显示它。我得到的只是一个空白的下拉列表。任何人都可以看到我出错的地方吗?
public ActionResult AddUnit(String usrCode)
{
var units = unitsClient.GetAllunits();
var allunitsCode = (from s in units select s.unitCode).ToList();
var thisUnitCode = (from s in db.Units
where s.UsrCode == usrCode
select s.UnitCode).ToList();
var notGot = allunitsCode.Except(thisUnitCode);
List<unitsummaryDTO> list = UnitList(units, notGot);
ViewBag.unitCode = new SelectList(list, "unitCode", "unitTitle");
var model = new UserUnit { UsrCode = usrCode };
return View("AddUnit", model);
}
private List<unitsummaryDTO> UnitList(unitsService.unitsDTO[] units, IEnumerable<string> notGot)
{
var allunits = unitsClient.GetAllunits();
var allunitsCode = (from s in allunits select s.unitCode).ToList();
IEnumerable<String> list1 = allunitsCode;
IEnumerable<String> list2 = notGot;
var listFinal = list1.Union(list2).toList;
return listFinal.Select(x => new unitsummaryDTO(){unitCode = x}).ToList();
}
这是我的View模型。但我得到的只是一个空白的下拉?任何人都可以帮助我。
@model Projv1.UserUnit
@Html.HiddenFor(model => model.unitCode)
@Html.DropDownList("UnitCode")
答案 0 :(得分:0)
这将是空白的,因为@Html.DropDownList("UnitCode")
没有来源。如果您查看MSDN for Html.DropDownList,您最有可能尝试使用的是DropDownList(String, IEnumerable<SelectListItem>)
。
您将选择列表放入ViewBag
unitCode
,请尝试:
@Html.DropDownList("Unit Code", ViewBag.unitCode);
更容易处理这个问题的方法是将UserUnit
扩展为ViewModel(或创建一些东西)以使SelectList
上需要的项目让MVC在绑定中完成繁重的工作
public class UserUnit
{
// ... other properties
IEnumerable<unitsummaryDTO> UnitCodes { get; set; }
public string MyUnitCode { get; set; }
}
然后
@Html.DropDownListFor(n => n.MyUnitCode,
new SelectList(Model.UnitCodes, "unitCode", "unitTitle"))