5

次の Razor スクリプトを使用してループしていますが、次のエラーが発生します。

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

エラー:

説明: この要求を処理するために必要なリソースのコンパイル中にエラーが発生しました。次の特定のエラーの詳細を確認し、ソース コードを適切に変更してください。

コンパイラ エラー メッセージ: BC30451: 'foreach' が宣言されていません。保護レベルにより、アクセスできない場合があります。

ソース エラー:

29 行目: 記事 30 行目: 31 行目: @foreach (ViewBag.Articles の var item) 32 行目: { 33 行目:

@(アイテム.インデックス). @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)

クラス終了

Public クラス 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 each ループの単純さよりも):

@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 に答える