アクションによって返されるビューの外でアクションのビューモデルを使用するのは嫌いです。このシナリオでベースビューモデルを使用すると、非常に不格好に感じます。
グローバルメニューの表示方法を指定するロジックを含む別の(子)アクションを使用する方が、よりクリーンでわかりやすいと思います。このアクションは、グローバルメニュービューを返します。レイアウトページからそのアクションを呼び出します。
または、メニューの状態が決定されるヘッダー全体に対してアクションを作成することも、if/elseを実行してグローバルメニューの部分ビューをレンダリングすることもできます。
以下の例は、ヘッダー/グローバルメニューのニーズをカプセル化し、コードインフラストラクチャ(ベースビューモデル)への影響を最小限に抑えてヘッダー/メニューを変更する将来の証拠となる方法を提供します。
〜/ Controllers / LayoutController.cs
public class LayoutController : Controller
{
[ChildActionOnly]
public ActionResult Header()
{
var model = new HeaderViewModel();
model.ShowGlobalMenu = ShowGobalMenu();
return View(model);
}
}
〜/ Views / Layout / Header.cshtml
@model HeaderViewModel
@{
Layout = "";
}
<header>
<a href="/">Home</a>
@if(Model.ShowGlobalMenu)
{
<ul>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
</ul>
}
</header>
〜/ Views / Shared / _Layout.cshtml
<html>
<body>
@Html.Action("Header", "Layout")
<p>Stuff</p>
</body>
</body>