我正在开发一个MVC3应用程序,其中一些用户应该编辑事件。 “管理员”和“促销员”都应该能够编辑他们的活动。观点是一样的。我为我的管理员和推销员创建了一个区域,因为它们有很多不同的选项。我的结构有点像这样
/admin/events/edit/1
/promoter/events/edit/1
在这两个区域中我使用的是不同的控制器,因为布局页面在启动器/管理员区域应该是不同的。从而导致重复,这就是我在寻找更好的解决方案。我可以放在“共享”文件夹中的视图,但是如何防止有两个方法(每个控制器中有一个)提供相同的视图?一些选择:
简而言之:如何在MVC 3应用程序中的不同区域/控制器之间共享编辑页面?
@Added由于评论太小:
我正在使用区域角色,因为我想要该角色的网站的某些视图。像一个管理区域,包含子部分事件/用户和所有其他管理员的东西。在这个管理区域我有一个事件控制器来处理管理区域的事件部分。另一个领域是推动者。它似乎是网站的逻辑划分(因为我可以控制布局,例如每个区域,我可以使用基类控制器来要求某些角色)。你是说这不实用吗?我喜欢单个事件控制器的想法,但我如何根据当前角色获得不同的布局页面/菜单?
答案 0 :(得分:0)
它应该在一个控制器中。听起来你正在将“区域”与角色和路由混合起来。
这些网址都应该映射到一个操作方法,而不是不同的控制器/区域。
“事件”应该是一个区域,并使用[Authorize]
属性或自定义属性,以便管理员和推广人员都可以看到它。
尝试为应用程序中的每个逻辑组件创建一个区域,或者如果您更喜欢使用DDD,则每个“聚合”。
所以在你的活动区域,你可以有这样的路线:
routes.MapRoute(
"Default",
"{role}/{controller}/{action}/{id}",
new { controller = "Events", action = "Index", id = "" },
new { role = new RoleBasedRouteConstraint() } // or you could use regex..
);
在角色路由令牌上使用路由约束来限制与角色对应的字符串值,以及控制器中基于角色的授权。