MVC - 相同的URL,多个视图

时间:2010-03-23 18:25:21

标签: model-view-controller

根据不同的用户角色,在MVC中为同一个URL设置多个视图是否被视为不良做法?例如: http://www.domain.com/ViewProductID/123会为普通用户显示“正常”的产品页面,它会向以管理员身份登录的用户显示“增强型”(产品统计信息,编辑标题等功能...)版本。

如果这是不好的做法,为什么?如果没关系,实施它的最佳方法是什么? 2个单独的模板或1个模板散布在if..else?

谢谢!

4 个答案:

答案 0 :(得分:2)

我认为根据上下文修改视图很好;它总是发生。是否执行if .. else或多个aspx文件实际上取决于很多的不同之处。几个备选方案:

1)使用Html.RenderAction调用AdminController操作来嵌入东西,如果用户不是管理员,AdminController可以返回空结果

或者,更好:

2)根据用户的角色/状态使用不同的主页面。这样,您可以将用于设置主控制器的逻辑拉到他喜欢的动作过滤器中,然后执行一次,但在有意义的地方应用它。只需确保备用母版页与contentplaceholderId的视图兼容。

答案 1 :(得分:1)

在我看来,为用户和管理员提供相同的网址是很好的。真正的问题是围绕用户的可用性。这对他们有什么影响吗?很多使用MVC的网站都会根据授权级别提供附加内容或链接。

您使用的是哪种框架和语言?如果您可以使用部分视图,则可能不需要完全不同的模板。

答案 2 :(得分:1)

如果页面不会显着不同(即它们显示相同的数据,可能更多用于管理员),那么我会说将所有代码放在同一个文件中。如果可能,请使用基于角色的能力管理系统,以便您可以询问以下内容:

if can? :create, Users do
  ...
else
  ...
end

然后,您设置您的能力,以便管理员和经理都可以创建用户。这样,您不必担心用户是谁,只需要担心用户可以做什么。

答案 3 :(得分:1)

基本上你在谈论导致不同页面的权限,这是很常见的事情。想想Facebook上针对2个不同的人的默认登陆页面。

实现与其他任何内容相同:将可以重用的常用元素组合在一起。简单的差异可能只在if..else和更复杂的差异属于不同的模板。