0

わかりました、メニュー付きのメニュー システムがあります (データベース フィールドから動的に生成されます)。このメニュー システムをいくつかのビューに含めたいと思います。それらはすべて、異なるコントローラーとモデルを使用します。

<ul>
            <li><a href="#">All</a></li>
                <%
                    foreach (var curCat in Model.CategoryList)
                    {
                %>
                        <li><a href="/messagecentre/category/<%=curCat.CategoryID.ToString() %>"><%= Html.Encode(curCat.Category1)%></a></li>               
                <% 
                   } 
                %>
        </ul>

これを達成するための最良の方法は何ですか?RenderPartial("Name",Model) synatx を実行できるように、他のすべてのモデルで Categories モデルを渡す必要がありますか?

4

2 に答える 2

0

3 番目の方法 - codeplex の MVC Futures、特に Html.RenderAction メソッドを確認してください。次に、メニューを出力するだけのコントローラーを作成して、それを処理させることができます。ViewData を汚染する必要はありません。

于 2009-10-06T15:20:25.873 に答える
0

これを行うには、2 つの異なる方法があります。すべてのモデルにカテゴリを含めることも、ViewDataDictionary にカテゴリを保存してそこから取得することもできます。通常、モデルをデータで拡張して、厳密に型指定された方法で使用できるようにしたいと考えていますが、この場合、データはどこにでもあるため、おそらく ViewData を使用し、ベース コントローラーを使用してデータを入力します。いつでも使用できるように (おそらく OnActionExecuted で) それを使用します。私の部分的なビューでは、ViewData アイテムを厳密に型指定されたオブジェクトにキャストし、そこから使用します。

これを行う理由は、メニューのデータについて知る必要がない実際のビューに対してモデルをクリーンに保つためです。私には、これは、ビュー固有のモデルを作成する通常のルートに対する合理的な例外のように思えます。

<% var categories = ViewData["categories"] as IEnumerable<Category>; %>
<ul>
    <li><a href="#">All</a></li>
        <%
    foreach (var curCat in categories)
    {
%>
        <li><a href="/messagecentre/category/<%=curCat.CategoryID.ToString() %>"><%= Html.Encode(curCat.Category1)%></a></li>               
<% 
   } 
%>
</ul>
于 2009-10-06T12:11:55.387 に答える