1

现在刚学习 ASP.NET、VB.Net、MVC。
我的意图是将模型传递给视图。我有一个简单的字符串案例的成功测试代码。我认为我今天绊倒的地方在于当前的视图模型是一个对象列表。我得到的错误是“传递到字典中的模型项的类型是'MVC_Test1.Geocode_Google_Results[]',但是这个字典需要一个'MVC_Test1.Geocode_Google_Results'类型的模型项。” 因此,以我有限的理解,似乎我正在传递一个对象列表(如预期的那样),但视图模型类型是用于创建列表的简单对象类型。

在许多示例中,响应都是用 C# 编写的。这些集中在 For Each 方法上(这是我对如何进行这项工作的第一个想法)。我已经尝试过了,但最终在 For Each ... AS object 子句中出现了对象类型错误。

我找到了一个 www 示例,它表明它应该作为一个数组来处理,如下所示: For I as integer = 0 to Model.Results.Count 这使我能够构建代码,但随后在运行时导致上面提到的对象类型错误而不是在构建时。

继续阅读,有几个主题似乎调用@model IEnumerable 作为一种方法。这只是使 viewdata 和模型对象在完成时未定义:

     @Modeltype IEnumberable MVC_Test1.Geocode_Google_Results

或者

     @Model IEnumberable MVC_Test1.Geocode_Google_Results

我怀疑我应该知道一些简单/基本的东西才能使这一切正常工作。这似乎直截了当地提出了一个设计问题,没有一个结构良好的答案。

如果可以在 VB.net 的上下文中解释答案,那对我会更有帮助。我有时确实使用其中一种网络 C# 到 VB.net 转换器进行翻译,因此任何响应都比没有好。

谢谢,

详情如下:

我有一个简单的课程:

Public Class Geocode_Google_Results
    Public Property Results As New List(Of ManyGeocodeCoordinates)
    'Methods
    'Add to list
    Public Sub AddResults(Address, Latitude, Longitude)
        Results.Add(New ManyGeocodeCoordinates() With {.Address = Address, .latitude = Latitude, .longitude = Longitude})
    End Sub
End Class

Public Class ManyGeocodeCoordinates
     Public Property Address As String
     Public Property latitude As Double
     Public Property longitude As Double
End Class

然后我填充一些数据:

    For x As Integer = 1 To resultCount
        ManyResults(x) = New Geocode_Google_Results
        ManyResults(x).AddResults(results.Elements("result").Elements("formatted_address").Value, results.Elements("result").Elements("geometry").Elements("location").Elements("lat").Value, results.Elements("result").Elements("geometry").Elements("location").Elements("lng").Value)

    Next

然后我传递给视图:

    ElseIf resultCount = 1 Then
        ' Send the user to the results page...Default View Page
        Return View(ManyResults)

然后我有一个测试视图:

@Modeltype MVC_Test1.Geocode_Google_Results
@Code
    ViewData("Title") = "httptest"
End Code

<h2>httptest</h2>
Default single address view
@model.Results(0).Address   <br />
@model.results(0).latitude <br />
@model.results(0).longitude <br />

在 IE 中运行此程序时,我收到关于对象列表与模型类型对象的上述错误。

4

1 回答 1

1

在继续阅读和实验之后,我发现了。

视图模型(类)是一个单一的对象。当我用数据填充类的实例时,我毫无疑问地使用了从对象数组上下文中提取的数组表示法。但是,该类不是对象数组。此功能由作为对象列表的属性提供。

因此,将数据分配为 Manyresults(x) 是不正确的。

需要分配的数据为

ManyResults.AddResults(results.Elements("result").Elements("formatted_address").Value, results.Elements("result").Elements("geometry").Elements("location").Elements("lat").Value, results.Elements("result").Elements("geometry").Elements("location").Elements("lng").Value)

同样,在视图中,模型数据通过以下形式访问:

@Model.Results(0).Address

在我的示例中,当返回多个结果时,将使用 Model.Results(n).Address,其中 n 是您要查找的结果维度。Model.results.count 将用于确定视图模型中有多少结果。

于 2012-12-28T14:55:14.197 回答