3

私は ASP.NET MVC3 Web アプリケーションに取り組んでおり、オブジェクトから動的に作成されたサブ メニューを持つナビゲーション メニューを作成したいと考えています。たとえば、書籍のリストを含む Library オブジェクト/モデルがあります。Navigation にこれらの各書籍へのリンクを動的に設定し、タイトルを表示させたいと考えています。

元:

Home
Book List
 - Book 1
 - Book 2
 - Book 3
About

これは、Controller から ViewData を介して Library オブジェクトを渡すことで機能します。次に、共有の _Layout.cshtml ページが ViewData を読み取り、ナビゲーション メニューにデータを入力します。ただし、このソリューションの欠点は、コントローラーでビューを返すすべてのメソッドが Library オブジェクトを ViewData に配置する必要があることです。だから、これを行うためのより良い方法またはより簡単な方法があるかどうか疑問に思っていますか?

jQueryでできると確信していますが、もっと良いアイデアがあるかもしれません。

4

2 に答える 2

3

Phil Haacked のブログHtml.RenderAction と Html.Action をご覧ください。彼の例は、実際にはレイアウトから簡単に呼び出すことができるメニューです。

于 2012-06-16T07:01:39.850 に答える
0

Erik が Phil Haack のブログに投稿したリンクは正しい解決策ですが、Phil の例が何をしているのかを理解するのにしばらく時間がかかりました。これはかなり古い MVC2 の例なので、誰かが同じ質問をした場合に備えて、私のプログラムが最終的にどのように見えるかの例を次に示します。

ホームコントローラー:

[ChildActionOnly]
public ActionResult Menu()
{
Library library = something.getLibrary();

return PartialView("_MenuPartial", library);
}

共有部分ビュー _MenuPartial.cshtml:

@model ProjectName.Models.Library

<ul>  
@foreach (var book in @Model.BookList)
{
     <li><a href="#">@book.Title</a></li>
}
</ul>

共有ビュー _Layout.cshtml:

<html>
<head>
</head>
<body>
   <nav>
   @{Html.RenderAction("Menu","Home");} 
   </nav>
</body>
</html>
于 2012-06-16T11:29:38.820 に答える