【发布时间】:2012-10-10 12:15:37
【问题描述】:
我有一个在 ColdFusion 上运行的 CMS,为此我通常有一个也在 ColdFusion 上运行的前端。出于学习的原因,我现在想用 ASP.Net MVC 4 Framework 来实现前端。对于 MVC 应用程序,您通常有一个简单的控制器/动作路由,这对我的 CMS 没有任何意义,因为它的结构完全不同。
我的 CMS 有一个导航模块作为基础,它处理网站的整个结构和路由。在每个导航条目上,我可以分配一个页面,该页面可以包含多个元素(例如简单的 HTML 代码、新闻模块或图库模块)。
网站结构示例:
- 主页 -> 页面 -> 元素 (html)
- 关于 -> 页面 -> 元素(html、...)
- our-company -> 页面 -> 元素(html、新闻、图库)
- our-products -> 页面 -> 元素(html、...)
- 联系 -> 页面 -> 元素(html、联系表)
因此,如果用户在浏览器中打开“www.example.com/about/our-company.html”,则应用程序会找到负责的导航条目“our-company”,它是条目“about ”。现在它应该呈现分配给此导航条目页面的元素“html”、“news”和“gallery”。
现在我的问题是,您将如何使用 ASP.Net MVC 框架实现这一点?甚至可能吗? MVC 在这里有意义吗?
我想为每个页面元素创建一个模型、控制器和视图。我是否需要一个基本控制器之类的东西,它可以在不同的(元素)控制器中呈现多个动作?
更新
网站结构不是静态的,而是动态的,由 CMS 管理。
另一个例子:www.example.com/de/about/more/andmore/something.html
在此示例中,我将在导航表中搜索键“某物”并获取相关页面。现在我想为这个页面渲染所有元素(我只是称它们为元素)。每个元素都应该有自己的控制器和多个操作。
【问题讨论】:
-
大多数 CMS 没有物理页面。以 DotNetNuke 为例,这些页面包含的所有用户页面、标题、文本等都存储在 MS SQL 中。
-
我的 CMS 还将所有页面存储在 MS SQL 中。我的示例中的 URL 只是针对搜索引擎进行了优化。
-
我想我的意思是,您需要一个处理程序或控制器或路由来执行硬核路由。您必须从其中一个中查找数据库中的导航。您可以使用通配符
/foo/{*}/bar路由来响应所有内容 -
基本上我可以创建一个路由规则,将每个请求转发到一个
NavigationController,它会在数据库中找到负责的页面。但我的问题是,每个页面都可以有一个或多个“页面元素”(这就是我所说的)。 “页面元素”可以是简单的 html 文本、图片、图库、新闻列表、动态表单甚至是整个商店。由于我们有大约 20 个这样的“页面元素”,我想知道将这些代码放在哪里。我认为最好的解决方案是,为每个“页面元素”创建一个控制器...... -
...但是我的
NavigationController如何渲染多个“页面元素”-Controller?