在我目前正在尝试转向Composite的ASP.Net项目中,我处理非物理页面时遇到了麻烦。
为了简单起见,假设我有一个网上商店,数据库中的每个类别都有自己的网址。 (例如:/ myshop / clothes)
在ASP.NET项目中,这样的URL将被路由到处理请求的页面Category.aspx,并从数据库中读取类别内容。
复合似乎更关注“真实”页面,实现这样的事情的最佳方式是什么? (特别是路线)
并且:有没有办法让这些生成的页面与Navigation.Path之类的模块一起使用?
答案 0 :(得分:5)
对于菜单生成和面包屑,您需要自己处理,最终使用SiteMap.Resolve上的SiteMapProvider事件动态挂钩“不存在的”页面。
关于路由,C1中有一个功能,它将URL解析为第一个“真实页面”,并将您可以使用的URL的多余部分交给您。让我们说/ myshop是你的商店页面,用户请求/ myshop /衣服,然后它仍然是/ myshow将被执行,你会在那里放置代码来处理你的类别。
在“myshop”页面上提取“衣服”的代码将是Composite.Core.Routing.Pages.C1PageRoute.GetPathInfo()
,并且为了指示C1不要抛出404错误,您调用Composite.Core.Routing.Pages.C1PageRoute.RegisterPathInfoUsage()
,让C1知道“衣服“是一个有效的类别。
详细了解API here。
如果您需要处理选择类别的不同情况,并且当用户直接点击/ myshop时,您可以将MyShop页面设置为使用特定模板,然后在那里包装{{1}在具有某种else-if逻辑的函数中的元素。如果未选择任何类别,请打印出<rendering:contentplaceholder>
的内容,否则请根据类别进行一些查找,然后打印出其他内容。