Asp.net mvc 复合C1 routes.MapPageRoute-指向页面

Asp.net mvc 复合C1 routes.MapPageRoute-指向页面,asp.net-mvc,asp.net-mvc-routing,c1-cms,Asp.net Mvc,Asp.net Mvc Routing,C1 Cms,我一直在添加一些不起作用的自定义路由 我可以让这个MVC路由工作,但问题是它直接路由到视图,而不是包含主布局等的页面。 MapRoute(“作业列表”、“作业详细信息/{category}/{title}/{id}”、新的{controller=“JobSearchModule”、action=“JobDetail”}) 我尝试路由到一个页面,该页面如下所示。这不起作用,simple转到找不到的页面。 MapPageRoute(“工作列表”、“工作详细信息/{category}/{title}/

我一直在添加一些不起作用的自定义路由

  • 我可以让这个MVC路由工作,但问题是它直接路由到视图,而不是包含主布局等的页面。 MapRoute(“作业列表”、“作业详细信息/{category}/{title}/{id}”、新的{controller=“JobSearchModule”、action=“JobDetail”})

  • 我尝试路由到一个页面,该页面如下所示。这不起作用,simple转到找不到的页面。 MapPageRoute(“工作列表”、“工作详细信息/{category}/{title}/{id}”、“~/Job seeders/Job search/Job detail”)

  • 我猜这可能是因为这不是一条物理路径,引擎盖下还有其他一些路由。因此,我通过向物理页面添加一个路由来测试这一点,如下所示。(这条路线成功了) MapPageRoute(“jobDetail2Route”、“job detail/{category}/{title}/{id}”和“~/Text.aspx”)

  • 这让我想到复合c1可能有一个物理URL,c1路由映射到该URL。我确信我在某些时候看到了与a/renders/Page.aspx有关的东西。有人知道我是否能以这种方式路由到物理页面吗

    谢谢

    大卫

    好的,还有更多的信息

  • 我意识到我可以使用/renders/Page.aspx?pageId=d622ab3b-2d33-4330-9e6e-d94f1402bc80获取URL。这个URL工作正常,所以我尝试向这个URL添加一个新路由,如下所示
  • MapPageRoute(“作业列表”、“作业详细信息/{category}/{title}/{id}”、“~/Renderers/Page.aspx?pageId=d622ab3b-2d33-4330-9e6e-d94f1402bc80”)

    不幸的是,这仍然不起作用。我在renders/Page.aspx上出错 值不能为null。 参数名称:pageUrlData


    有什么想法吗

    不要使用页面URL的内部表示形式,如
    ~/renders/page.aspx?pageId=D62AB3B-2d33-4330-9e6e-d94f1402bc80
    您应该使用公共表示形式,如
    /my/page/URL

    要从页面id获取公共表示,可以使用如下方法:

    using Composite.Data;
    ...
    public string GetPageUrl( Guid pageId )
    {
        using (var c = new DataConnection())
        {
            PageNode p = c.SitemapNavigator.GetPageNodeById(pageId);
            return p.Url;
        }
    } 
    
    这将为您提供具有所提供id的页面的公共URL。如果您使用不同的内容语言运行网站,此方法将自动获取与运行MVC功能的页面语言相匹配的URL

    如果需要显式更改此URL的语言,请使用重载
    数据连接(CultureInfo culture)
    而不是默认构造函数

    通过上述方法,您应该能够做到这一点:

    routes.MapPageRoute(
       "Job-Listing", 
       "job-detail/{category}/{title}/{id}", 
       GetPageUrl(Guid.Parse("d622ab3b-2d33-4330-9e6e-d94f1402bc80"));