我一直在添加一些不起作用的自定义路线
我可以使这个MVC路由工作,但问题是直接到视图的简单路由,而不是包含主布局等的页面。 routes.MapRoute(“Job-Listing”,“job-detail / {category} / {title} / {id}”,new {controller =“JobSearchModule”,action =“JobDetail”});
我尝试路由到如下所示的页面。这没用,简单到了找不到的页面。 routes.MapPageRoute(“工作列表”,“工作细节/ {category} / {title} / {id}”,“〜/求职者/工作搜索/工作细节”);
< / LI>我猜这可能是因为这不是一条物理路径,而且还有其他一些路由在引擎盖下。所以我通过向物理页面添加一个Route来测试这个,如下所示。 (这条路线有效) routes.MapPageRoute(“jobDetail2Route”,“job-detail / {category} / {title} / {id}”,“〜/ Text.aspx”);
这让我觉得复合c1可能有一个C1路由映射到的物理URL。我确信我在某些时候已经看到与/Renderers/Page.aspx有关。有谁知道我是否可以这种方式以某种方式路由到物理页面?
由于
大卫
确定如此进一步的信息。
routes.MapPageRoute(“Job-Listing”,“job-detail / {category} / {title} / {id}”,“〜/ Renderers / Page.aspx?pageId = d622ab3b-2d33-4330-9e6e- d94f1402bc80" );
不幸的是,这仍然无效。我在Renderers / Page.aspx上出错了 值不能为空。 参数名称:pageUrlData
有什么想法吗?
答案 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"));