【问题标题】:Can MVC routing be used to create a dynamic content management system with dynamic pages stored in db rather than in view pages是否可以使用 MVC 路由创建动态内容管理系统,其中动态页面存储在 db 中而不是视图页面中
【发布时间】:2009-07-07 13:32:07
【问题描述】:

有没有好的 mvc 路由示例,其中每个 404 页面未找到请求都被路由到 MVC 中的标准视图,该视图基本上从数据库中提取内容。

【问题讨论】:

    标签: asp.net-mvc content-management-system


    【解决方案1】:

    只需将此路由添加到 RouteTable 的底部:

    routes.MapRoute("DynamicPages", "{*page}", new { Controller = "DynamicPages", Action = "Show", Page = String.Empty });
    

    并创建一个控制器来显示来自 db 的动态页面:

    public class DynamicPagesController : Controller
    {
        public ActionResult Show(string page)
        {
            var pageContent = DB.GetContentForPage(page);
    
            return Content(pageContent);
        }
    }
    

    【讨论】:

      【解决方案2】:

      这是一种方法:在 Application_Start 的 global.asax 文件中,您需要设置默认控制器工厂。用您自己的工厂实例覆盖它。

      void Application_Start()
      {
          ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());
      }
      

      MyControllerFactory 应该从DefaultControllerFactory 继承,并且在选择要使用的控制器时,请在数据库中查找要显示的相应页面。如果页面存在,请选择适当的控制器并覆盖 requestContext.RouteData 集合中的操作以指向显示动态页面的适当操作。

      如果请求的页面不存在,则将调用传回基本方法并让它执行通常的操作。

      还有其他方法可以做到这一点,但是这个应该可以工作,并允许您在点击 404 页面之前拦截请求。

      【讨论】:

        【解决方案3】:

        修改web.config文件,你可以Reference to this page查看web.config部分的设置自定义错误页面。

        【讨论】:

          猜你喜欢
          • 2012-06-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-13
          • 2013-01-29
          • 1970-01-01
          相关资源
          最近更新 更多