2017-03-24 11 views
0

初心者の質問: my db:Products、カテゴリの2つのテーブル。私は製品のビューを作成しました。私はサイドバーメニューをパーシャルビューとして持っています。PartialViewでモデルのforeachループを作成する方法は? (MVC.NET)

PartialView Name: _SidebarMenu 
Layout Name:  _AdminLayout 

私のカテゴリを_SidebarMenuに動的にリストしたいと思います。プロジェクト名[

辞書に渡されるモデルアイテムはタイプ「System.Collections.Generic.List`1は次のとおりです。

@model IEnumerable<ProjectName.MVCWebUI.Models.Categories> 

@foreach (var item in Model) 
    { 
     <li><a href="#">@item.CategoryName</a></li> 
    } 

しかし、私は、サーバーエラーを得た:だから私は_SidebarMenuでこれを試してみました.MVCWebUI.Models.Products] 'が、この辞書には' ProjectName.MVCWebUI.Areas.Admin.Models.AdminMenuContent 'タイプのモデル項目が必要です。

レンダリングビューでモデルではなく別のモデルをリストするにはどうすればよいですか?

@model IndexViewModel 

部分が持っているでしょう:

@model List<Category> 

だから、できるあなたのメインビューから

public class IndexViewModel() 
{ 
    public List<Product> Products { get; set; } 
    public List<Category> Categories { get; set; } 
} 

メインビューなければなりません:

+1

コントローラーにはどのようなモデルが渡されていますか?あなたはどのようにあなたの部分を呼びますか? – maccettura

+0

@maccettura @ Html.Partial( "_ SidebarMenu")として_AdminLayoutでpartialを呼び出します。 –

答えて

0

はあなたのViewModelなどを持っていると仮定すると、部分をレンダリングし、正しいリストを渡す:

@Html.Partial("~/Areas/....your_partial_name.cshtml", Model.Categories) 
+0

ここでOPの問題は、サイドバーメニューがレイアウトに含まれていることです。その結果、OPがすべての単一のビューに使用される単一のモデルに、非常に脆いコードを作る 'Categories'プロパティが含まれていることを保証しない限り、この答えは役に立たない。 –

1

子供の行動を使用することをお勧めします。これは、そうでない場合、適切なモデルがパーシャルビューに渡されることを実質的に不可能にするためです。あなたはこのメニューを表示する場所、以下を追加し、あなたのレイアウトで、その後

[ChildActionOnly] 
public ActionResult SidebarMenu() 
{ 
    // get categories from DB or whatever 
    return PartialView("_SidebarMenu", categories); 
} 

:基本的には、お好みのコントローラでは、などのアクションを追加

「foo」がある
@Html.Action("SidebarMenu", "Foo") 

このアクションを入力したコントローラーの名前

関連する問題