0

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

  1. 我可以让这条 MVC 路由正常工作,但问题是它直接路由到视图而不是包含主布局等的页面。 routes.MapRoute("Job-Listing", "job-detail/{category}/{title }/{id}", new {控制器 = "JobSearchModule", action = "JobDetail" });

  2. 我尝试路由到如下所示的页面。这不起作用,简单地转到未找到的页面。routes.MapPageRoute("Job-Listing", "job-detail/{category}/{title}/{id}", "~/job-seekers/job-search/job-detail");

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

这让我想到复合 c1 可能具有 C1 路由映射到的物理 URL。我确信我在某些时候看到了与 /Renderers/Page.aspx 相关的内容。有谁知道我是否可以以这种方式路由到物理页面?

谢谢

大卫

好的,所以一些进一步的信息。

  1. 我意识到我可以使用 /Renderers/Page.aspx?pageId=d622ab3b-2d33-4330-9e6e-d94f1402bc80 获取 URL。此 URL 工作正常,因此我尝试向此 URL 添加新路由,如下所示...

routes.MapPageRoute("Job-Listing", "job-detail/{category}/{title}/{id}", "~/Renderers/Page.aspx?pageId=d622ab3b-2d33-4330-9e6e-d94f1402bc80") ;

不幸的是,这仍然没有奏效。我在 Renderers/Page.aspx 上收到错误,值不能为空。参数名称:pageUrlData

有任何想法吗?

4

1 回答 1

1

而不是使用像~/Renderers/Page.aspx?pageId=d622ab3b-2d33-4330-9e6e-d94f1402bc80您这样的页面 URL 的内部表示,而应该使用像/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")); 
于 2013-10-25T09:00:54.090 回答