在MVC中。
尝试在Razor中显示dropDownList时收到此错误消息。
DataBinding:'System.Int32'不包含名为'BranchId'的属性。
在观察窗口中,我可以看到包含BranchId
和BranchName
的数据库正在返回1条记录
我没有引用Model类中的SelectList
。
在Controller类
中var list = new SelectList(db.Branchs.Where(branches => !db.CompanyBranches
.Any(d => d.BranchId == branches.BranchId))
.Select(branches => branches.BranchId).ToList(),
"BranchId", "BranchNumber");
ViewBag.Branch = new SelectList(list);
在Create.cshtml中
@Html.DropDownList("Branch", new SelectList(ViewBag.Branch, "BranchID", "BranchName"), htmlAttributes: new { @class = "form-control" })
感谢Stephen
我按照你的建议改变了我的CompanyBranchesController中的lambda表达式 就是现在 var list = db.Branchs.Where(branches =>!db.CompanyBranches .Any(d => d.BranchId == branches.BranchId)) .Select(b => new {BranchId = b.BranchId,BranchName = b.BranchName})。ToList();
下拉列表的Create.cshtml是 @ Html.DropDownList(“Branch”,ViewBag.Branch为IEnumerable,htmlAttributes:new {@class =“form-control”})
下拉列表中的结果是 {BranchId = 5,BranchNumber = Br0003}
我一直在玩它,包括添加到CompanyBranchController
List items = new List();
foreach(列表中的var i)
{
SelectListItem s = new SelectListItem();
s.Text = i.BranchName.ToString();
s.Value = i.BranchId.ToString();
items.Add(一个或多个);
}
除了尝试不同的剃刀表情,但没有成功。
我出错的任何想法?
答案 0 :(得分:1)
查看代码的这一部分( SelectList构造函数)
Select(branches => branches.BranchId).ToList()
您正在选择branchId。所以基本上你将整数列表传递给SelectList
构造函数。但是您指定BranchId
是数据值字段。但整数没有这样的属性。
因此,您应该将Select更改为具有此属性的匿名类型
Select(b => new { BranchId = b.BranchId, BranchNumber = b.BranchId).ToList()
分配给ViewBag时,您不需要再次创建另一个SelectList。所以这很好
ViewBag.Branch = list;
并在您看来,
@Html.DropDownList("Branch", ViewBag.Branch as IEnumerable<SelectListItem>,
htmlAttributes: new { @class = "form-control" })
甚至更轻松,您只需将商品转换为SelectListItem
var list= db.Branchs.Where( // Put your where clause here)
.Select(branches => new SelectListItem { Value = branches.BranchId.ToString(),
Text = branches.BranchId.ToString()}).ToList();
ViewBag.Branch = list;
答案 1 :(得分:0)
您的代码是正确的,只是在我添加的CompanyBranchContoller中
List<SelectListItem> items = new List<SelectListItem>();
foreach (var i in list)
{
SelectListItem s = new SelectListItem();
s.Text = i.BranchName.ToString();
s.Value = i.BranchId.ToString();
items.Add(s);
}
ViewBag.Branch = items;
然后在Create.cshtml类中,我将对下拉列表的引用更改为您的建议:
@Html.DropDownList("Branch", ViewBag.Branch as IEnumerable<SelectListItem>, htmlAttributes: new { @class = "form-control" })
感谢你的所有帮助Stephen
保