我可以在MVC3基本控制器上为ViewResults设置默认布局吗?

时间:2012-05-01 13:56:50

标签: asp.net-mvc-3

如果我有一个基本控制器,例如StaffBaseController我可以导致返回的任何ViewResult结果都有一个默认的Layout页面吗?例如StaffLayout.cshtml。我知道我可以在文件夹结构中使用_viewstart文件来设置默认布局。只是想知道我是否可以在我的基本控制器类上设置它。

如果是这样,我该怎么办?是否可以在某些情况下覆盖默认值?

由于

格雷姆

1 个答案:

答案 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)。