关于vb.net:Loop通过VB ASP.NET MVC Razor中的Collection

Loop through Collection in VB ASP.NET MVC Razor

我正在使用以下Razor脚本进行循环,但它给出了以下错误:

1
2
3
4
@foreach (var item in ViewBag.Articles)
{
    @item.Title
}

错误:

描述:编译服务此请求所需的资源时出错。请查看以下特定错误详细信息,并适当修改源代码。

编译器错误消息:BC30451:未声明"foreach"。由于其保护级别,可能无法访问。

源错误:

Line 29: Articles Line 30: Line 31: @foreach
(var item in ViewBag.Articles) Line 32: { Line 33:

@(item.index). @item.model.Description

Source File: C:\Users\darchual\documents\visual studio
2010\Projects\Blog\Blog\Views\Blog\Details.vbhtml Line: 31

它在我的IDE中还说"foreach"没有声明。由于其保护级别,可能无法访问。"

如何循环查看集合?谢谢你的帮助。

编辑:

以下是整个代码:

@ModelType Blog.Blog

@Code
ViewData("Title") = ViewBag.Title End Code

Details

Blog

1
2
3
4
5
6
7
8
9
10
11
12
13
14
name

    @Html.DisplayFor(Function(model) model.name)


description

    @Html.DisplayFor(Function(model) model.description)


dateCreated

    @Html.DisplayFor(Function(model) model.dateCreated)
 </fieldset>

Articles

1
2
3
4
@foreach (var item in ViewBag.Articles)
{
    @item.Title
}

1
2
3
@Html.ActionLink("Edit","Edit", New With {.id = Model.BlogId}) |
@Html.ActionLink("Back to List","Index")
</p>

以下是博客对象:

Imports System.Data.Entity Imports
System.ComponentModel.DataAnnotations

Public Class Blog

1
2
3
4
5
6
7
Public Property BlogId() As Integer

Public Property Name() As String
Public Property Description() As String
Public Property DateCreated As Date

Public Overridable Property Articles() As ICollection(Of Article)

End Class

Public Class BlogDbContext

1
2
Inherits DbContext
Public Property Blogs As DbSet(Of Blog)

End Class

编辑:

终于成功了。工作代码为:

1
2
3
@For Each item In ViewBag.Articles
    @@item.Title
Next


答案是:

1
2
3
@For Each item In ViewBag.Articles
    @@item.Title
Next

您的页面代码在vb.net中,而foreach()是C构造。您只需要修改代码,使用for each循环的vb结构:

ASP.NET论坛上的此线程有一个很好的答案/代码段:

1
2
3
4
5
6
7
8
Dim list As New List(Of Article)
list = ViewBag.Articles
If (list.Any())
Then    
    For Each item As Article In ViewBag.Articles
        @item.Title
    Next
End If


由于模型绑定器在ASP.NET MVC中的工作方式,在很多情况下,将每个值的索引发回列表都很有帮助。

因此,我更喜欢使用索引for循环(而不是为每个循环使用强类型的简单性):

1
2
3
4
@For i = 0 To Model.Articles.Count - 1
    Dim curItem = Model.Articles(i)
    @Html.EditorFor(Function(model) curItem)
Next

进一步阅读:使用Razor语法的ASP.NET Web编程简介(Visual Basic)C#


如果您已经处于Razor代码块中,则不需要@

1
2
3
4
5
6
7
@if(ViewBag.Articles.Count>0)
{
   foreach (var item in ViewBag.Articles)
   {
     @item.Title
   }
}

你使用的是vb.net版本的foreach

1
2
3
@For Each item As Article In ViewBag.Articles
  @item.Title
Next