5

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

@foreach (var item in ViewBag.Articles)
{
    <div>@item.Title</div>
}

错误:

说明:在编译服务此请求所需的资源期间发生错误。请查看以下特定错误详细信息并适当修改您的源代码。

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

源错误:

第 29 行:文章 第 30 行:第 31 行:@foreach(ViewBag.Articles 中的变量项) 第 32 行:{ 第 33 行:

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

源文件:C:\Users\darchual\documents\visual studio 2010\Projects\Blog\Blog\Views\Blog\Details.vbhtml 行:31

它还在我的 IDE 中说“未声明'foreach'。由于其保护级别,它可能无法访问。”

如何循环浏览集合?感谢您的帮助。

编辑:

这是整个代码:

@ModelType 博客。

@Code ViewData("Title") = ViewBag.Title 结束代码

细节

博客

<div class="display-label">name</div>
<div class="display-field">
    @Html.DisplayFor(Function(model) model.name)
</div>

<div class="display-label">description</div>
<div class="display-field">
    @Html.DisplayFor(Function(model) model.description)
</div>

<div class="display-label">dateCreated</div>
<div class="display-field">
    @Html.DisplayFor(Function(model) model.dateCreated)
</div> </fieldset>

文章

@foreach (var item in ViewBag.Articles)
{
    <div>@item.Title</div>
}

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

这是博客对象:

导入 System.Data.Entity 导入 System.ComponentModel.DataAnnotations

公开课博客

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)

结束类

公共类 BlogDbContext

Inherits DbContext
Public Property Blogs As DbSet(Of Blog)

结束类

编辑:

终于让它工作了。工作代码是:

@For Each item In ViewBag.Articles
    @<div>@item.Title</div>
Next
4

4 回答 4

7

答案是:

@For Each item In ViewBag.Articles
    @<div>@item.Title</div>
Next
于 2012-07-26T19:03:16.630 回答
2

您的页面代码位于 VB.Net 中,并且foreach()是 C# 构造。您只需要使用 For Each 循环的 VB 构造来修改您的代码:

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

Dim list As New List(Of Article)
list = ViewBag.Articles
If (list.Any()) 
Then     
    For Each item As Article In ViewBag.Articles 
        <div>@item.Title</div>
    Next
End If
于 2012-07-26T17:46:52.467 回答
1

如果您已经在剃刀代码块中,则不需要@

@if(ViewBag.Articles.Count>0)
{
   foreach (var item in ViewBag.Articles)
   { 
     <div>@item.Title</div>
   }
}

您使用的是VB.NET版本foreach吗?

@For Each item As Article In ViewBag.Articles
  <div>@item.Title</div>
Next
于 2012-07-26T17:26:53.103 回答
1

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

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

@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#

于 2017-03-17T13:36:49.113 回答