そのレイアウト内に部分ビューを使用したレイアウトページがあります。部分ビューには、作成したメニュー機能が含まれています。メニューを部分ビューに分割して、保守が容易になるようにします。メニューはすべてのページで使用されるため、意図的にレイアウトに配置されていますが、メニューには条件付き要素があり、一部のオプションは特定のページにのみ表示されます。
私は前進するために何が問題になるかを見つけました。メニューは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を渡すことができる1つの例が含まれています。メニューとレイアウトにモデルが明示的に含まれていないという点で機能しますが、あまりきれいに感じられません。