2009-09-27 56 views
2

我的領域模型是這樣的:我們有一堆學校作爲「層次結構」的根。每所學校都有教師和課程,每門課程有一名教師。我試圖用mvc框架的邏輯對此進行建模,我很困惑。例如,\ school \ details \ x應該提供一所學校的第一頁。這應該包含一個鏈接到其教師名單,並列出每個課程。asp.net MVC:分層領域模型和控制器

教師列表意味着索引操作應該參數化到用戶正在查看的學校:\ teacher \ id其中id是學校。與課程列表相同。然後創建教師或課程也應該參數化到我們正在查看的學校:\ teacher \ create \ x where x = school。

我該如何隨身攜帶學校證件?是否有一些乾淨的方法可以做到這一點,還是我需要將它一直傳遞到每​​個需要它的視圖?它也使網站的URL非常神祕。我正在想辦法讓網址結構像{school-alias}\{controller}\{action}\{id}一樣,但我仍然需要找到一種方式來傳遞學校。如果這樣做完成了,那麼我需要實施某種過濾器,如果他所請求的學校與他的個人資料中的某個不匹配,則不允許用戶執行某些操作。

我認爲,如果我在URL附近攜帶schoolid,該網站更像REST,比如,從用戶的個人資料中獲取schoolId。

回答

0

最後我回答了我自己的問題。

真正的解決方案是:Restfull Routing。它在RoR中實現了這個功能,這正是我所需要的。太糟糕了,這不是更多人的要求,所以它可以進入mvc-trunk。

1

我會爲每所學校創建首字母縮略詞。例如:

學校no。 1 - ABC 學校no。 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 [「首字母縮寫詞」]與存儲在配置文件中的數據來檢查它。

+0

我現在正在嘗試。問題是我必須用自己的學校編碼或學校首字母縮略詞與自己一起玩。我必須將它作爲每個動作的參數傳遞,並將其全部鏈接發送回去。 我想沒有辦法自動這個? – 2009-09-27 22:25:52

+0

我有完全相同的想法 - 通過什麼途徑可以到達〜/ {acronym}視圖,例如/ UCLA,它將成爲學校首字母縮略詞UCLA的索引頁面?這應該與您剛發佈的規則並行工作。 – 2009-09-27 22:30:30

+0

如果用戶只與一個學校相關聯,則不必使用url。您還可以使用可用學校製作組合框,並將選定的學校存儲在Session對象中。 我的規則實際上解決了/ UCLA的問題。打開/加州大學洛杉磯分校URL會帶你到「學校」管理員,「詳細」行動,你將有「加州大學洛杉磯分校」作爲首字母縮略詞。 – LukLed 2009-09-28 00:26:20

1

編寫擴展方法重載的鏈接呈現從路由數據中提取了學校標識符(縮寫或任何你選擇使用),並將其添加至IN。這樣,你的行動可以選擇使用已經經過的路由值該標識符是否存在,但不需要將其添加到視圖數據中,並且您不必記住將其包含在任何操作鏈接中(您只需記住使用操作鏈接過載)。

我會做的動作鏈接超載很明顯的不同,因此任何人跟在後面,你可以看到你正在做的事情不同尋常。這可以像Html.SchoolActionLink(...)一樣簡單。

例如: 如果您的網址是http://mydomain.com/abc/teachers/list和路線定義爲{學校}/{控制器}/{行動}然後路由值字典的值將是「ABC」的重點「學校」。路徑值可以通過HtmlHelper.ViewContext.RouteData.Values訪問。

+0

所以你的意思是自定義動作鏈接的擴展方法將學校ID作爲參數?我不明白你的意思是「從路由數據中提取學校標識符」。 – 2009-10-09 12:14:23

+0

更新答案,詳細介紹如何從路由數據中提取學校 – Neal 2009-10-09 22:00:27