复合C1 routes.MapPageRoute - 指向页面

时间:2013-09-21 04:56:00

标签: asp.net-mvc asp.net-mvc-routing c1-cms

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

  1. 我可以使这个MVC路由工作,但问题是直接到视图的简单路由,而不是包含主布局等的页面。 routes.MapRoute(“Job-Listing”,“job-detail / {category} / {title} / {id}”,new {controller =“JobSearchModule”,action =“JobDetail”});

  2. 我尝试路由到如下所示的页面。这没用,简单到了找不到的页面。 routes.MapPageRoute(“工作列表”,“工作细节/ {category} / {title} / {id}”,“〜/求职者/工作搜索/工作细节”);

    < / LI>
  3. 我猜这可能是因为这不是一条物理路径,而且还有其他一些路由在引擎盖下。所以我通过向物理页面添加一个Route来测试这个,如下所示。 (这条路线有效) routes.MapPageRoute(“jobDetail2Route”,“job-detail / {category} / {title} / {id}”,“〜/ Text.aspx”);

  4. 这让我觉得复合c1可能有一个C1路由映射到的物理URL。我确信我在某些时候已经看到与/Renderers/Page.aspx有关。有谁知道我是否可以这种方式以某种方式路由到物理页面?

    由于

    大卫

    确定如此进一步的信息。

    1. 我意识到我可以使用/Renderers/Page.aspx?pageId=d622ab3b-2d33-4330-9e6e-d94f1402bc80获取网址。此URL工作正常,因此我尝试向此URL添加新路由,如下所示......
    2. routes.MapPageRoute(“Job-Listing”,“job-detail / {category} / {title} / {id}”,“〜/ Renderers / Page.aspx?pageId = d622ab3b-2d33-4330-9e6e- d94f1402bc80" );

      不幸的是,这仍然无效。我在Renderers / Page.aspx上出错了 值不能为空。 参数名称:pageUrlData

      有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您应使用~/Renderers/Page.aspx?pageId=d622ab3b-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的语言,请使用重载DataConnection(CultureInfo culture)而不是默认构造函数。

使用上述方法,你应该可以这样做:

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