2012-04-13 33 views
2

レイアウト内にレイアウトページがあります私は部分ビューを使用しました。部分ビューにはビルドしたメニュー機能が含まれています。それは維持するのが簡単です。メニューはレイアウトに意図的に配置されているため、すべてのページに使用されていますが、一部のオプションは特定のページにのみ表示されるメニューには条件付きの要素があります。レイアウトページ内の部分ビューにモデルを渡すことができません

私は、私が前進していくために問題となるものを見つけました。メニューは、コンテンツを含む部分的なビューをレンダリングするためにajax呼び出しを使用します(ページの読み込みを減らしています)。連絡先のリスト、クリックされたときのメニューオプションは連絡先のリストを表示する必要があります。私はすでに会社のモデルの下で連絡先リストを読み込んでいますが、!メニューはレイアウトページ内に含まれている部分的なビューであり、モデルを受け入れることができないため、パーシャルビューにモデルを渡すことができないため、私は新しいパーシャルビューからアクセスできません。メニューの部分図がレイアウトページに表示されるため、ロードしようとしています。

これは固い状況です。新しいセクションをレンダリングするようにレイアウトを変更して、新しいビューモデルを渡すことができますが、作成するすべてのページでメニューを参照する必要があります。害虫!)私はここで何かを逃しているに違いない(これは私の最初のMVC3アプリケーションだと考えている)。助言がありますか?

編集:私は自分でこれをさらに取っ、短期で私のレイアウトページには、常にも、そのデータにアクセスできるメニューが含まれているように、私の部分図として、それを消費したページのモデルにアクセスすることができます。私はページをチェックし、必要に応じてデータを渡すメニューの部分ビューにいくつかの条件付きロジックを書きました。

<div class="menu">  
    <ul> 
     <li><a href="@Url.Action("Create", "Contact")">New Contact </li> 
     <li><a href="@Url.Action("Index", "Contact")">Contact List </a></li> 
    </ul> 
    @if (Request.Url.PathAndQuery.Contains("/Contact/Details/")) 
    { 
     <ul> 
      <li>@Html.ActionLink("New Activity", "Create", "Activity", new { companyid = 0, contactid = Model.contact.id }, null)</li> 
     </ul> 
    } 
</div> 

上記メニュー部分図の小さいサンプルであるが、メニューは接触/詳細ページ用に構築およびmodel.contact.idに通過することができるされている一例を含んでいます。それは私のメニューと私のレイアウトは明示的にモデルを含んでいないが、非常にきちんと感じることはありません。

答えて

5

あなたの質問を正しく理解していれば、レイアウトにモデルを持たせたくないので、パーシャルビューにモデルがあるとは思わないということです。ですから、レイアウトが使用するベースモデルのタイプを拡張するためのアクションを一切必要とせずに、どのようにモデルをレイアウトに組み込むことができるのかという疑問があります。

1)メニューのレイアウトにHtml.Partialを使用する代わりに、Html.Actionを使用して、メニューデータを取得するアクションメソッドを使用します。

2)カスタムWebViewPageを書くと、今、あなたもあなたの部分図でモデルを必要としない

return ((BaseController)ViewContext.Controller).MenuData; 

のようなものを持っているプロパティが含まれ、それがデータに直接アクセスすることができます。

両方とも、基本モデルで使用できるすべてのメニュー情報を含むMenuプロパティが必要ですが、ウェブサイト内のすべてのページがこのデータにアクセスする必要がある場合は、適切と思われます。

編集:適切なビューページまたはサブレイアウトのいずれかでメニューの一部をカスタマイズすることができるセクションが必要なような気がします。

セクションの概要はhttp://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx、ネストされたレイアウト/セクションの情報はhttp://blogs.msdn.com/b/marcinon/archive/2010/12/15/razor-nested-layouts-and-redefined-sections.aspxを参照してください。

+0

返信いただきありがとうございます、私は少しこれを取ったので、私の投稿を編集しました。 –

+0

@DavidAbrahamあなたの新しい懸念についてアドバイスをいただきました。 – DMulligan

関連する問題