EF Core .ToList()查询返回“ {Namespace.Models.Model}”而不是数据

时间:2018-12-30 07:10:32

标签: c# asp.net-identity entity-framework-core

我有一个名为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 ...的电子邮件地址,然后返回其下面的属性。这是断点处的屏幕截图:

enter image description here

enter image description here

enter image description here

除了我对如何使用@ Html.DropDownList HtmlHelper仍然了解甚少(在其他问题中对此有更多了解)之外,我无法弄清楚两者之间的区别。显然没有错误,但是我不知道从这里出发。谢谢!

3 个答案:

答案 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" })

XXXYYY分别是要用作项目的显示文本和项目ID的属性。

您也可以查看Using the DropDownList Helper with ASP.NET MVC作为完整示例。

希望有帮助!

答案 2 :(得分:1)

如果您有一个对象集合(例如“情境”对象),并且具有许多属性,例如ExitURL和Caption,并且您告诉某些列表助手将集合用作该列表的数据源,则它无法知道所需的属性选择作为显示文本。结果,它将仅在每个对象上调用ToString并使用返回的内容作为显示文本。在其默认实现中,ToString返回对象类型的表示形式-这就是您所看到的

因此,您可以选择;

  • 坚持使用您当前的样式并覆盖ToString,以便它返回显示的文本,
  • 将“情境”对象的集合简化为字符串的集合(对于每种“情境”,从您喜欢的任何属性中创建一个代表它的字符串),然后将该字符串集合用作列表驱动程序,或者
  • 将集合转换为SelectListItem集合,以便使列表助手可以访问其知道如何使用的对象的集合-因此,可以将其定向到要用于结果结果的各种属性的“情境”属性HTML(例如,将ExitUrl用作HTML控件的Value,将Caption用作显示文本)。进行此转换的位置可能取决于您需要如何重用数据