我对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'在被赋值之前就被使用了。在运行时可能会产生空引用异常。”
我可以在上下文中看到我的表格:
我猜它应该这样做,因为IEnumerable(Of TestWebApplication2.Site)
是索引视图的模型类型,它可以循环通过For Each
就好了。
那么我对listOfSites缺少什么?
非常感谢!
答案 0 :(得分:0)
问题在于您将listOfSites声明为:
Dim listOfSites As IEnumerable(Of TestWebApplication2.Site)
不使用New
,但另一个问题是您在使用之前似乎没有填充listOfSites
!
顺便说一句,您无法实例化listOfSites
,因为IEnumerable(Of T)
是一个接口,而不是一个对象。
您或许应该在Controller
内填充对象,并在您的数据中返回View()
。
快速创建控制器及相关视图:
这将为您添加一切 - 足以让您至少开始!
答案 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
。