MVC - 在不向Controller添加动作的情况下创建新视图

时间:2009-12-07 15:33:58

标签: model-view-controller routing content-management-system extensibility

我正在使用asp.net MVC 1.0开发一个类似于CMS的迷你应用程序(我将在2.0版本发布时升级它)。一旦我想要的功能,这对CMS来说非常重要,就是管理员能够将网页添加到他们的网站。

基本上,如果管理员想要添加一个名为“Links”的页面,我希望他们能够这样做,而不必经历任何将操作添加到控制器并编译新程序集的麻烦。 / p>

我有一个解决方案的想法,我想知道社区的想法。

我认为我应该编写一个扩展Controller类的类(为了参数,我们称之为UserGeneratedGenericController)。在这个类中,我将有一个Action读取参数并重定向到与传递给操作的参数相对应的View。

我还必须在Global.asax.cs文件中编辑路由

因此 /UserGeneratedGenericController/Links会遇到同样的行动 /UserGeneratedGenericController/News会点击,但会根据需要显示视图。

你说什么?我对您对此方法的评论以及您对其他方法的建议感兴趣。

2 个答案:

答案 0 :(得分:1)

我认为你提出的是要走的路

答案 1 :(得分:0)

你想获取页面标题,并为它创建一个唯一的url slug,然后你希望能够根据url slug从数据库中加载内容(使用url slug作为id,而不是实际的数据库ID)。

public ActionResult Index(string UrlSlug) {
  // Get Content For Page {UrlSlug}
}

所以你的路线是/ Pages / {UrlSlug},样本将是/ Pages / Links。然后,您的PagesController上的Index操作将拉出url slug(链接)并从存储加载适当的内容,并在主布局中呈现内容。我认为你正在考虑这些问题,只要确保当用户添加页面时,就为它创建一个唯一的URL。用下划线替换空格,删除特殊字符等,以创建一个url安全密钥,用于在请求时加载页面信息。