我有一个名为Situation
的模型,我只是将它们全部获取,因此可以在视图的下拉框中列出它们。这是我的查询:
var situations = _context.Situations.ToList();
下拉框:
@Html.DropDownList("SituationID", null, "Pick One: ", new { @class = "form-control" })
奇怪的是,返回集中的每个元素都是我的Namespace.Models.Situation
而不是顶层的值。
我对返回用户(public class ApplicationUser : IdentityUser
)的其他查询返回其[0],1 ...的电子邮件地址,然后返回其下面的属性。这是断点处的屏幕截图:
除了我对如何使用@ Html.DropDownList HtmlHelper仍然了解甚少(在其他问题中对此有更多了解)之外,我无法弄清楚两者之间的区别。显然没有错误,但是我不知道从这里出发。谢谢!
答案 0 :(得分:3)
这不是Ef问题。这是呈现DropDownList的错误。 您必须将数据模式更改为适当的数据结构,例如Dictionary或Value-Text类(SelectList)。然后将其绑定到您的DropDown。
这是您的问题的代码示例:
ViewBag.SituationList = _context.Situations.Select( x=> new SelectListItem{Value= x.Id, , Text= x.SituationName}).ToList();
,然后使用以下代码将其绑定到您的下拉列表:
@Html.DropDownListFor(model => model.label, (SelectList)ViewBag.SituationList)
答案 1 :(得分:2)
我认为您需要将Situation
个项目的列表转换为SelectListItem
的列表。应该是这样的:
ViewBag.Situations = _context.Situations
.Select(situation => new SelectListItem { Text = situation.XXX, Value = situation.YYY })
.ToList();
然后在您看来:
@Html.DropDownList("SituationID", ViewBag.Situations, "Pick One: ", new { @class = "form-control" })
XXX
和YYY
分别是要用作项目的显示文本和项目ID的属性。
您也可以查看Using the DropDownList Helper with ASP.NET MVC作为完整示例。
希望有帮助!
答案 2 :(得分:1)
如果您有一个对象集合(例如“情境”对象),并且具有许多属性,例如ExitURL和Caption,并且您告诉某些列表助手将集合用作该列表的数据源,则它无法知道所需的属性选择作为显示文本。结果,它将仅在每个对象上调用ToString并使用返回的内容作为显示文本。在其默认实现中,ToString返回对象类型的表示形式-这就是您所看到的
因此,您可以选择;