アプリケーションに2つの別々のレイアウトがあります。 1つはウェブサイトのパブリックセクション用で、もう1つはメンバーサイド用です。
簡単にするために、これらの各サイトのすべてのロジックが2つの異なるコントローラにきちんとラップされているとしましょう。
そして、それぞれの下にあるすべてのビューに対応するレイアウトがあります。
_ViewStart.cshtmlファイルを使用して、 "Public"の下にあるすべてのViewの/ ActionがPublicLayoutを使用し、 "Staff"の下にあるすべてのものがStaffLayoutを使用するように指定するにはどうすればよいですか。
ありがとうございます。
_ViewStart.cshtml
フォルダー内のデフォルトのファイルをオーバーライドして目的のレイアウトを指定する/Views/Public
ファイルを/Views
フォルダー内に置くことができます。
@{
Layout = "~/Views/Shared/_PublicLayout.cshtml";
}
同様に、_ViewStart.cshtml
フォルダー内に別の/Views/Staff
ファイルを置くことができます。
@{
Layout = "~/Views/Shared/_StaffLayout.cshtml";
}
また、コントローラアクション内でビューを返すときにどのレイアウトを使用するかを指定することもできますが、それはアクションごとです。
return View("Index", "~/Views/Shared/_StaffLayout.cshtml", someViewModel);
さらに別の可能性は、レイアウトを無効にするカスタムアクションフィルタです。あなたがこれを達成するために多くの可能性を見ることができるように。あなたのシナリオに最も適したものを選ぶのはあなた次第です。
更新:
コメントセクションで要求されているように、これはマスターページを選択するアクションフィルタの例です。
public class LayoutInjecterAttribute : ActionFilterAttribute
{
private readonly string _masterName;
public LayoutInjecterAttribute(string masterName)
{
_masterName = masterName;
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
var result = filterContext.Result as ViewResult;
if (result != null)
{
result.MasterName = _masterName;
}
}
}
次に、必要なレイアウトを指定して、このカスタム属性を使用してコントローラまたはアクションを装飾します。
[LayoutInjecter("_PublicLayout")]
public ActionResult Index()
{
return View();
}
もう1つの方法は、ビュー内にレイアウトを定義することです。
@{
Layout = "~/Views/Shared/_MyAdminLayout.cshtml";
}
もっとやるべきことは、見つけることができる ここ 、これが誰かに役立つことを願っています。
この方法は、初心者がASP.NET MVCアプリケーションでレイアウトのレンダリングを制御する最も簡単な方法です。コントローラを識別し、レイアウトをparコントローラとしてレンダリングすることができます。これを行うには、Viewsフォルダのルートディレクトリにある_ViewStartファイルにコードを記述します。次の例は、その方法を示しています。
@{
var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToString();
string cLayout = "";
if (controller == "Webmaster") {
cLayout = "~/Views/Shared/_WebmasterLayout.cshtml";
}
else {
cLayout = "~/Views/Shared/_Layout.cshtml";
}
Layout = cLayout;
}
記事全文を読む こちら "ASP.NET MVCで異なるレイアウトをレンダリングする方法"