MVC如何从DBContext中的表中的行创建列表

时间:2015-10-02 14:02:09

标签: asp.net-mvc vb.net entity-framework html.dropdownlistfor

我对MVC比较陌生,而且我有点卡住....

我有2个型号:

网站模型 -

SiteID() As Integer
Name() As String
Latitude() As Double
Longitude() As Double

设备型号 -

DeviceID() As Integer
Make() As String
Model() As String
Serial() As String
Site() As Site

如您所见,设备已链接到网站。我要做的是在“创建和编辑的设备”视图中,使“站点”字段为DropDownListFor,其列表包含“站点”表中存在的站点。

所以这就是我在View中创建的列表,它将在下拉列表中显示:

@ModelType TestWebApplication2.Device
@Code
    ViewData("Title") = "Create"

    Dim selectSite As List(Of SelectListItem)
    Dim listOfSites As IEnumerable(Of TestWebApplication2.Site)

    For Each item In listOfSites
        selectSite.Add(New SelectListItem() With {.Value = item.SiteID, .Text = item.Name})
    Next

End Code

问题在于,

  

对于listOfSites中的每个项目

我在listOfSites下得到了一个绿色的波浪形,它说“变量'listOfSites'在被赋值之前就被使用了。在运行时可能会产生空引用异常。”

我可以在上下文中看到我的表格:

Application DB Context

我猜它应该这样做,因为IEnumerable(Of TestWebApplication2.Site)是索引视图的模型类型,它可以循环通过For Each就好了。

那么我对listOfSites缺少什么?

非常感谢!

2 个答案:

答案 0 :(得分:0)

问题在于您将listOfSites声明为:

Dim listOfSites As IEnumerable(Of TestWebApplication2.Site)

不使用New,但另一个问题是您在使用之前似乎没有填充listOfSites

顺便说一句,您无法实例化listOfSites,因为IEnumerable(Of T)是一个接口,而不是一个对象。

您或许应该在Controller内填充对象,并在您的数据中返回View()

快速创建控制器及相关视图:

  1. 右键单击解决方案中的controllers文件夹;
  2. 添加 - >控制器...
  3. 使用实体框架
  4. 选择带视图的控制器
  5. 选择适当的模型和数据上下文
  6. 这将为您添加一切 - 足以让您至少开始!

答案 1 :(得分:0)

好的,经过一些游戏后,我明白了。

我没有在控制器中做任何事情。

这就是现在设备创建视图的代码部分中的代码:

@ModelType TestWebApplication2.Device
@Code
    ViewData("Title") = "Create"

    Dim selectSite As New List(Of SelectListItem)
    Dim db = New TestWebApplication2.Models.TestWebApplication2Context
    Dim listOfSites As List(Of Site)
    listOfSites = (From site In db.Sites Select site).ToList()

    For Each item In listOfSites
        selectSite.Add(New SelectListItem() With {.Value = item.SiteID, .Text = item.Name})
    Next

End Code

DropDownListFor正在使用selectSite作为其中的项目来源。

现在有效。唯一的问题是观点看起来有点奇怪......但如果我无法解决这个问题,这应该是一个单独的问题。

感谢@Ric提供有关填充listOfSites

的线索