それは汚い感じていないが、私がやった:
魔法の文字列(理論):
public enum ViewDataType
{
Layout = 0
}
ViewDataを拡張
public static class ViewDataExtensions
{
public static void Add(this ViewDataDictionary viewData, ViewDataType viewDataType, object value)
{
viewData.Add(viewDataType.ToString(), value);
}
public static TResult Get<TResult>(this ViewDataDictionary viewData, ViewDataType viewDataType)
where TResult : class
{
var result = viewData[viewData.ToString()] as TResult;
return result;
}
}
コントローラーの拡張:
public static class ControllerExtensions
{
public static IActionResult View(this Controller instance, object model, string layout)
{
instance.ViewData.Add(ViewDataType.Layout, layout);
return instance.View(model);
}
public static IActionResult View(this Controller instance, string viewName, object model, string layout)
{
instance.ViewData.Add(ViewDataType.Layout, layout);
return instance.View(viewName, model);
}
}
アメリカGE:
public IActionResult Index()
{
// blah blah logic
var result = this.View("ViewName", model, "Layouts/Default");
}
とViewStartで:
var layout = this.ViewData.Get<string>(ViewDataType.Layout)
if (string.IsNullOrEmpty(layout))
{
Layout = "Layouts/Default";
}
else
{
Layout = layout;
}
奇妙なは、私のために正常に動作します。 –
[tag:asp.net-core-mvc]別名MVC 6を使用していますか? –