我的领域模型是这样的:我们有一堆学校作为“等级”的根。每所学校都有老师和课程,每门课程都有一名老师。我试图用mvc框架的逻辑对此进行建模,但我很困惑。例如,学校\details\x应该给出学校的首页。这应该包含一个到教师列表的链接,以及一个到每个课程的列表。
教师列表意味着索引操作应该是用户正在查看的学校的参数:\teacher\id,其中id是学校。课程列表也是如此。然后create teacher或course也应该是我们正在查看的学校的参数:\teacher\create\x where x=school。
我怎么随身携带学生证?有没有什么很好的方法,或者我需要一直把它传递给每个需要它的视图?这也使得站点的URL非常隐蔽。我在想一种方法来使url结构像{school-alias}\{controller}\{action}\{id}一样,但我仍然要找到一种方法在学校里传递。如果实现了这一点,那么我需要实现某种类型的过滤器,如果用户请求的schoolId与其配置文件中的one不匹配,则不允许用户执行某些操作。
我认为,与从用户的个人资料中获取schoolid相比,如果我在URL中携带了校号,网站就更像REST了。
发布于 2009-11-04 00:41:34
最后,我回答了我自己的问题。
真正的解决方案是:Restfull Routing。它用RoR实现了这个功能,这正是我所需要的。太糟糕了,这并不是更多人的要求,这样它就可以进入mvc-trunk。
发布于 2009-09-27 20:46:26
我会为每所学校创建首字母缩写。例如:
学校1- ABC学校2- DEF
如果我想列出老师,我会写
http://site-address/ABC/teachers/list或仅http://site-address/ABC/teachers
显示有关学校的基本信息
http://site-address/ABC
路由代码为:
routes.MapRoute(
"Default", // Route name
"{acronym}/{controller}/{action}/{id}", // URL with parameters
new {controller = "School", action = "Details", id = ""} // Parameter defaults
);
我将在教师、学校和班级控制器上创建授权操作过滤器,以检查用户是否有权访问URL中首字母缩写参数定义的学校。你可以通过比较filterContext.RouteData.Values“首字母缩略词”和存储在配置文件中的数据来检查它。
发布于 2009-10-08 21:09:10
编写一个扩展方法来重载链接的呈现,该链接从路由数据中提取学校标识符(首字母缩写或任何您选择使用的名称),并将其添加到已传递的路由值中。这样,您的操作可以选择使用标识符(如果它存在,但不需要将其添加到视图数据中),并且您不必记住将其包含在任何操作链接中(您只需记住使用操作链接重载)。
我会让动作链接重载明显不同,这样任何跟在你后面的人都能看到你在做一些不寻常的事情。这可以像Html.SchoolActionLink( ...)一样简单。
例如:如果您的url是学校,并且您的路由被定义为{ http://mydomain.com/abc/teachers/list }/{控制器}/{操作},则路由值字典将在关键字“学校”处具有值"abc“。路由值可以通过HtmlHelper.ViewContext.RouteData.Values访问。
https://stackoverflow.com/questions/1483752
复制相似问题