如果我有一个基本控制器,例如 StaffBaseController,我可以使返回的任何 ViewResult 结果具有默认布局页面吗?例如 StaffLayout.cshtml。我知道我可以使用文件夹结构中的 _viewstart 文件来设置默认布局。只是想知道我是否可以在我的基本控制器类上设置它。
如果是这样,我该怎么做?在某些情况下是否可以覆盖默认值?
谢谢
格雷姆
如果我有一个基本控制器,例如 StaffBaseController,我可以使返回的任何 ViewResult 结果具有默认布局页面吗?例如 StaffLayout.cshtml。我知道我可以使用文件夹结构中的 _viewstart 文件来设置默认布局。只是想知道我是否可以在我的基本控制器类上设置它。
如果是这样,我该怎么做?在某些情况下是否可以覆盖默认值?
谢谢
格雷姆
油脂,
你可以在你的基本控制器中尝试这样的事情(这是从一个 aspx 项目中获取的,但应该可以针对剃须刀进行调整):
protected override ViewResult View(string viewName, string masterName,
object model)
{
// we share some views that aren't partialviews
// therefore, we have to ensure that the Shareholder view
// is ALWAYS attached to the logged in user if they aren't an admin user
bool userIsAdmin = IsAuthorised(new[] { "Admin" });
if (!userIsAdmin && !string.IsNullOrEmpty(
ControllerContext.HttpContext.User.Identity.Name))
{
masterName = "Shareholder";
}
return base.View(viewName, masterName, model);
}
因此在该示例中,如果用户不是管理员用户,则最初定义的主模板名称 (Site.Master) 值将更改为“股东”(Shareholder.Master)。