使用不同母版页的相同视图 - ASP.NET MVC

Mat*_*ieu 2 asp.net-mvc master-pages

我是ASP.net MVC的新手,我想使用视图,但根据用户角色使用不同的母版页.

现在,我扶着使用一个控制器谁返回视图1,如果用户在基于role1视图2基于role2. View1View2包含相同的局部视图,用于呈现由两者共享但具有不同母版页的内容.

我想知道这是一个好习惯还是你推荐另一种设计.做一些简单的事情我的解决方案似乎有点复杂.也许我错过了什么

谢谢 !

Dar*_*rov 6

您可以拥有一个根据用户角色返回主名称的函数,然后编写一个自定义操作过滤器,该过滤器将在操作后执行,并根据当前连接的用户角色设置相应的母版页:

public class MasterChooserAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);
        var result = filterContext.Result as ViewResult;
        if (result != null)
        {
            var user = filterContext.HttpContext.User;
            result.MasterName = GetMaster(user);
        }
    }

    private string GetMaster(IPrincipal user)
    {
        // TODO: based on the current user roles return the proper master page
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用此操作过滤器简单地装饰您的基本控制器,或者如果这是ASP.NET MVC 3应用程序,只需将其声明为全局过滤器.