2

我正在构建一个小型 mvc4 站点,但遇到了一个小问题:/

该站点将有一个管理区域,在此区域中站点的管理员应该能够动态创建新页面。假设管理员在另一个名为“hello”的页面下创建了一个名为“World”的新页面。现在,当用户导航到.domain.com/hello/World 时,应该会显示这个新创建的页面。它基本上是一个非常简单的 CMS 系统的功能。

因此,我需要一种将控制器和操作尚未涵盖的所有调用重定向到一个特定控制器上的一个特定操作的方法。

我以前在使用 urlrewriting 的 web 表单中做过这个。我刚刚检查了磁盘上是否存在 aspx 页面,如果不存在,我会重定向到一个名为 pagehandler.aspx?pageid={some_page_id} 的页面,但我想有一种方法可以在 mvc4 中进行路由吗?

4

1 回答 1

0

您可以将字符串传递给View(),因此您应该能够通过如下路线捕获它:

routes.MapRoute(
    name: "DynamicPageView",
    url: "Page/{pageName}",
    defaults: new { controller = "Page", action = "DisplayPage", pageName = "Index" }
    );

这会遇到这样的方法:

[HttpGet]
public ActionResult DisplayPage(string pageName)
{
    return View(viewName: pageName);
}

我自己也做过类似的事情来托管模型;像这样的控制器方法可以处理任意数量的页面,并且可以轻松扩展以处理子文件夹,因此非常适合快速将可以像真实站点一样导航的虚拟页面放在一起。

说了这么多,值得一提的是,在可能的情况下,我宁愿让最终用户(甚至是管理员)远离这会暴露的内部结构。相反,您可能应该想出一个模型来表示页面上的内容,存储它,并使用模板按 ID 或标题显示它。

于 2013-05-09T12:21:21.763 回答