2013-08-19 37 views
0

我已經遵循了這個很好的教程,它解釋瞭如何將Umbraco作爲內容交付系統的優勢。 Tutorial MVC Umbraco =>您的模型和視圖不應該依賴於特定的Umbraco實現,這對於真正的前端開發人員來說是一個巨大的優勢。Umbraco MVC實現 - 視圖不依賴於Umbraco實現

控制器從Umbraco.Web.Mvc.RenderMvcController繼承以便從CMS訪問數據。 現在我的問題是,我們不能使用@ HTML.actionlink進行導航,似乎這隻在SurfaceController中受支持。

現在我的問題是我們將如何在Umbraco.Web.Mvc.RenderMvcController中實現導航?我們仍然可以使用本地的@ HTML.actionlink標籤嗎?

回答

1

不,你不能。只是因爲所有請求都通過一個單獨的動作。爲了檢索CMS管理頁面的路徑,您需要使用@Model提供的節點/內容遍歷。在這裏看到more details就可以了。

編輯

爲了澄清,文章的作者是暗示一把umbraco實施應更符合傳統的MVC實現與意見很少或沒有邏輯線。因此,節點數據的任何查詢應該在視圖之前發生(例如在映射器中)。所以這是你必須檢索鏈接的地方。

Umbraco的默認MVC實現強制所有請求通過單個控制器上的單個動作去。作者的實現允許請求在每個文檔類型的一個控制器上共享 - 這是更好的IMO。但它仍然意味着諸如Html.ActionLink之類的東西在視圖中是多餘的,因爲每頁都沒有動作。

進一步編輯

如果你想建立與一把umbraco管理頁面和非一把umbraco頁面的組合導航列表,無論執行的,我會:

  1. 創建兒童動作和導航視圖在單獨的NavigationController中繼承SurfaceController
  2. 使用繼承的SurfaceControllerthis.CurrentPage屬性遍歷Umb raco內容緩存來檢索相關的Umbraco管理的頁面。然後,您可以使用每個頁面結果的Url屬性獲取其路徑,並使用Name屬性獲取頁面標題
  3. 使用this.Url.Action("action", "controller")可檢索指向特定非Umbraco操作的路徑。或者,如果頁面是數據庫管理的,則在此處使用您的數據層(例如EF,NHibernate,PetaPoco)
  4. 將它們結合到字典中以製作您需要的列表,其中Key是路徑,而Value是頁標題
  5. 將其作爲視圖模型傳遞給視圖。

當然,還有更多的東西需要考慮像緩存,但簡而言之,這是一個相當基本的實現。

+0

然後,我實際上不明白我原來的帖子中的教程的價值。 你被迫使用Umbraco工具來建立一個網站。 我沒有看到使用像Visual Studio這樣的外部IDE的附加價值。另外真正的MVC模式對於開發者來說是隱藏的,在umbraco下使用MVC,但是你不能說你正在開發像MVC模式描述的那樣。 – JVGAG

+0

很多網站並不純粹是關於內容而是數據。想象一下購物網站或投資基金網站。這些網站需要內容,但幾乎所有的數據都來自目錄或數據源。所以通常情況下,您將使用Umbraco作爲您網站的基礎,並且還有其他非Umbraco控制器,視圖等輸出非CMS管理的數據。我理解文章來自哪裏,但對於小型內容驅動的網站來說,這種做法可能是過度的。 – Digbyswift

+0

但我應該如何實現umbraco(rendermvccontroller)和非umbraco控制器之間的導航? – JVGAG