如果我有一个基本控制器,例如StaffBaseController我可以导致返回的任何ViewResult结果都有一个默认的Layout页面吗?例如StaffLayout.cshtml。我知道我可以在文件夹结构中使用_viewstart文件来设置默认布局。只是想知道我是否可以在我的基本控制器类上设置它。
如果是这样,我该怎么办?是否可以在某些情况下覆盖默认值?
由于
格雷姆
答案 0 :(得分:2)
Greame,
你可以在你的基本控制器中尝试这样的东西(这是从一个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”(Shareholder.Master)。