フォルダ_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();
}
Razor
ビューのレイアウトを削除する場合は、次のように設定してくださいLayout = null;