1

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

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

谢谢

格雷姆

4

1 回答 1

2

油脂,

你可以在你的基本控制器中尝试这样的事情(这是从一个 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)。

于 2012-05-01T14:02:00.260 回答