我已经按照这个很好的教程解释了如何利用Umbraco作为内容传送系统的更多优势。 Tutorial MVC Umbraco =>您的模型和视图不应该依赖于特定的Umbraco实现,这对于真正的前端开发人员来说是一个巨大的优势。
控制器继承自Umbraco.Web.Mvc.RenderMvcController,以便从CMS访问数据。 现在我的问题是我们不能使用@ HTML.actionlink进行导航,似乎只支持SurfaceController。
现在我的问题是我们如何在Umbraco.Web.Mvc.RenderMvcController中实现导航?我们还可以使用native @ HTML.actionlink标记吗?
答案 0 :(得分:1)
不,你不能。仅仅因为所有请求都通过单个操作。要检索CMS管理页面的路径,您需要使用@Model
提供的节点/内容遍历。请参阅此处的more details。
修改强>
为了澄清,文章的作者建议Umbraco实现应该更符合传统的MVC实现,在视图中很少或没有逻辑。因此,任何查询节点数据都应该在视图之前进行(例如在Mappers中)。所以这是你必须检索链接的地方。
Umbraco的默认MVC实施强制所有请求通过单个控制器上的单个操作进行。作者的实现允许每个文档类型在一个控制器之间共享请求 - 这是更好的IMO。但它仍然意味着Html.ActionLink
之类的内容在视图中是多余的,因为每页都没有操作。
进一步修改
如果您想构建一个包含Umbraco管理页面和非Umbraco页面组合的导航列表,无论实现如何,我都会:
NavigationController
SurfaceController
中创建子操作并查看导航
this.CurrentPage
的{{1}}属性遍历Umbraco内容缓存,以检索相关的Umbraco管理的页面。然后,您可以使用每个页面结果的SurfaceController
属性来获取其路径,并使用Url
属性来获取页面标题Name
检索特定非Umbraco操作的路径。或者,如果页面是数据库管理的,此时使用数据层(例如EF,NHibernate,PetaPoco)this.Url.Action("action", "controller")
为路径且Key
为页面标题当然还有更多需要考虑的事情,比如缓存,但简而言之,这是一个相当基本的实现。