我想根据用户所处的角色创建一个具有不同显示的视图.
我应该为不同的角色创建不同的视图,还是应该检查Veiw页面本身而不是动作中的角色?
我如何在视图页面上检查角色?
或者我应该使用检查Veiw页面上的角色而不是动作,如果有的话,有人可以告诉我如何在视图页面上检查
你需要做两件事.检查操作上的角色作为安全措施,并检查视图上的角色以启用/禁用特定控件.
在您的视图页面中,检查角色的长形式是
HttpContext.Current.User.IsInRole("Administrator")
许多开发人员将创建页面帮助程序方法,以便最终为您的应用程序提供更简洁的内容
public static bool IsAdmin(this ViewUserControl pg) { return pg.Page.User.IsInRole("Administrator") }
然后在你的视图中你可以使用this.IsAdmin()
为了使您的视图混乱,请查看使用部分视图
<% if (IsAdmin()) { Html.RenderPartial("AdminPanel"); } else { Html.RenderPartial("UserPanel"); } %>
如果显示根据角色而变化 - 而且变化很小 - 那么我会在视图中进行检查.如果根据角色限制某些视图,那么我会在控制器中进行检查.如果视图完全不同(这很难想象),那么每个角色的单独视图可能是合适的.
您可能希望将某些特定于角色的视图组件抽象为部分视图以简化视图逻辑 - 基本上您只需要根据角色检查是否包含部分视图.
此外,除了检查"IsAuthenticated"之外,我还将角色检查逻辑移动到控制器,并将(作为数据)传递给基于角色包含/排除哪些元素的视图信息.这可以防止实际的业务逻辑流入您的视图.