首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >asp.net MVC:层次域模型和控制器

asp.net MVC:层次域模型和控制器
EN

Stack Overflow用户
提问于 2009-09-27 15:07:10
回答 3查看 943关注 0票数 2

我的领域模型是这样的:我们有一堆学校作为“等级”的根。每所学校都有老师和课程,每门课程都有一名老师。我试图用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了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-04 00:41:34

最后,我回答了我自己的问题。

真正的解决方案是:Restfull Routing。它用RoR实现了这个功能,这正是我所需要的。太糟糕了,这并不是更多人的要求,这样它就可以进入mvc-trunk。

票数 0
EN

Stack Overflow用户

发布于 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

路由代码为:

代码语言:javascript
复制
    routes.MapRoute(
            "Default", // Route name
            "{acronym}/{controller}/{action}/{id}", // URL with parameters
            new {controller = "School", action = "Details", id = ""} // Parameter defaults
            );

我将在教师、学校和班级控制器上创建授权操作过滤器,以检查用户是否有权访问URL中首字母缩写参数定义的学校。你可以通过比较filterContext.RouteData.Values“首字母缩略词”和存储在配置文件中的数据来检查它。

票数 1
EN

Stack Overflow用户

发布于 2009-10-08 21:09:10

编写一个扩展方法来重载链接的呈现,该链接从路由数据中提取学校标识符(首字母缩写或任何您选择使用的名称),并将其添加到已传递的路由值中。这样,您的操作可以选择使用标识符(如果它存在,但不需要将其添加到视图数据中),并且您不必记住将其包含在任何操作链接中(您只需记住使用操作链接重载)。

我会让动作链接重载明显不同,这样任何跟在你后面的人都能看到你在做一些不寻常的事情。这可以像Html.SchoolActionLink( ...)一样简单。

例如:如果您的url是学校,并且您的路由被定义为{ http://mydomain.com/abc/teachers/list }/{控制器}/{操作},则路由值字典将在关键字“学校”处具有值"abc“。路由值可以通过HtmlHelper.ViewContext.RouteData.Values访问。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1483752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档