【问题标题】:Dynamic pages in MVC4MVC4 中的动态页面
【发布时间】:2013-05-03 21:15:58
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    您可以将字符串传递给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 或标题显示它。

    【讨论】:

    • 只需测试它,它就可以正常工作。谢谢:)
    猜你喜欢
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 2016-06-20
    • 2023-03-09
    相关资源
    最近更新 更多