これを行うために私が考えることができる最も簡単な方法は、Viewメソッドをオーバーライドするカスタム基本クラスからコントローラーを派生させることです。
public class MyControllerBase : Controller {
public override ViewResult View(string viewName, string masterName, object model) {
if(String.IsNullOrEmpty(masterName)) {
masterName = GetDefaultLayout();
}
base.View(viewName, masterName, model);
}
public virtual string GetDefaultLayout() {
return // your default layout here
}
}
上記のコードでは、masterNameをハードコードされた値に明示的に設定できます。または、コントローラーがメソッドをオーバーライドして、コントローラー固有のレイアウトを提供することもできます。または、コントローラーの属性から読み取ることもできます。これは、次のようなものです。
masterName = GetType().GetCustomAttributes().
OfType<MyCustomAttribute>().FirstOrDefault().DefaultLayoutPage;
もちろん、を作成する必要がありますMyCustomAttribute
。