4

在我目前正尝试迁移到 Composite 的 ASP.Net 项目中,我在处理非物理页面时遇到了麻烦。

为简单起见,假设我有一个网上商店,并且数据库中的每个类别都有自己的 url。(例如:/myshop/clothes)

在 ASP.NET 项目中,这样的 url 将被路由到处理请求并从数据库中读取类别内容的页面 Category.aspx。

Composite 似乎更专注于“真实”页面,实现这样的事情的最佳方式是什么?(尤其是路由)

并且:有没有办法让这些生成的页面与 Navigation.Path 等模块一起使用?

4

1 回答 1

5

对于菜单生成和面包屑,您需要自己处理,最终使用SiteMapProvider上的SiteMap.Resolve事件来动态挂钩您的“不存在”页面。

关于路由,C1 中有一个功能,可以将 url 解析为第一个“真实页面”,并将多余的 url 部分交给你可以使用。假设 /myshop 是您的商店页面,并且用户请求 /myshop/clothes,那么它将仍然是 /myshow 将被执行,并且您将在那里放置处理您的类别的代码。

在“myshop”页面上提取“clothes”的代码将是Composite.Core.Routing.Pages.C1PageRoute.GetPathInfo(),并指示 C1 不要抛出 404 错误,您调用Composite.Core.Routing.Pages.C1PageRoute.RegisterPathInfoUsage(),让 C1 知道“clothes”是一个有效类别。

在此处阅读有关它的 API 的更多信息。

如果您需要处理选择类别时的不同情况,并且当用户直接点击 /myshop 时,您可以将 MyShop 页面设置为使用特定模板,并在其中将<rendering:contentplaceholder>元素包装在一个函数中,该函数有一些一种else-if逻辑。如果没有选择类别,则打印出 的内容<rendering:contentplaceholder>,否则根据类别进行查找并打印出其他内容。

于 2011-11-27T23:41:14.233 回答