MVC4中的动态页面

时间:2013-05-09 11:46:35

标签: asp.net asp.net-mvc-4 routing redirect

我正在建立一个小型的mvc4网站,但我遇到了一个小问题:/

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

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

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

1 个答案:

答案 0 :(得分: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或标题显示它。