可以使用MVC路由来创建动态内容管理系统,其中动态页面存储在db而不是视图页面中

时间:2009-07-07 13:32:08

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

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

3 个答案:

答案 0 :(得分:2)

只需将此路线添加到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);
    }
}

答案 1 :(得分:1)

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

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

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

如果请求的页面不存在,请将对基本方法的调用传回给它,并让它按照通常的方式执行。

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

答案 2 :(得分:0)

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