在VB ASP.NET MVC Razor中循环收集

时间:2012-07-26 17:24:09

标签: asp.net-mvc vb.net asp.net-mvc-3

我使用以下Razor脚本循环但它给了我以下错误:

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

错误:

描述:编译服务此请求所需的资源时发生错误。请查看以下特定错误详细信息并相应地修改源代码。

编译器错误消息:BC30451:&#39; foreach&#39;没有宣布。由于其保护级别,它可能无法访问。

来源错误:

  

第29行:第30行:第31行:@foreach   (ViewBag.Articles中的var项)第32行:{第33行:

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

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

它还在我的IDE中说&#34;&#39; foreach&#39;没有宣布。由于其保护级别,它可能无法访问。&#34;

如何循环收藏?谢谢你的帮助。

编辑:

以下是整个代码:

  

@ModelType Blog.Blog

     

@code       ViewData(&#34; Title&#34;)= ViewBag.Title End Code

     

详细

     

      博客

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

以下是Blog对象:

  

Imports System.Data.Entity Imports   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)
     

结束班

     

Public Class BlogDbContext

Inherits DbContext
Public Property Blogs As DbSet(Of Blog)
     

结束班

编辑:

终于开始工作了。工作代码是:

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

4 个答案:

答案 0 :(得分:5)

答案是:

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

答案 1 :(得分:2)

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

This thread on the ASP.NET Forum's has a good answer / code snippet

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

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:1)

由于模型绑定器在ASP.NET MVC中的工作方式,有很多场景可以回发列表中每个值的索引。

所以我更喜欢使用索引的循环(对于每个循环的强类型的简单性):

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

进一步阅读
Introduction to ASP.NET Web Programming Using the Razor Syntax (Visual Basic) | C#