我需要一些关于如何创建动态面包屑控件的示例或想法,该控件将为由 LINQTOSQL 提供支持的动态日期框架动态生成面包屑
问问题
2484 次
2 回答
1
你可能需要三样东西:
- 数据库中的层次结构*
- 基于StaticSiteMapProvider的自定义 SiteMap 提供程序,用于读取层次结构
- 用于显示面包屑导航的SiteMapPath控件。
* 当我想要一个客户端站点类似的东西时,我做了一些搜索,并决定将路径结构存储在数据库中是最简单的——我之前在这里给出了任意深度站点地图的答案——请注意,如果您使用的是 SQL2008,您可以使用新的HierarchyId数据类型来简化此操作。
话虽如此,如果您有类别和产品之类的东西,您可能可以在数据库中使用更简单的系统。
我需要创建来解决这个问题的关键功能是:
/// <summary>
/// Gets this SiteMaps children.
/// </summary>
/// <value>The children.</value>
public List<SiteMap> Children {
get {
if (null == m_Children && !m_AttemptedToLoadChildren) {
m_AttemptedToLoadChildren = true;
m_Children = ctx.GetSiteMapChildrenByPath(_Path, 1).ToList();
// Sorts ascending.
m_Children.Sort(( sm1, sm2 ) => sm1.SortOrder.CompareTo(sm2.SortOrder));
// CMS Sorts Descending, so reverse the list.
m_Children.Reverse();
}
return m_Children;
}
}
/// <summary>
/// Gets a value indicating whether this instance has any children.
/// </summary>
/// <value>
/// <c>true</c> if this instance has children; otherwise, <c>false</c>.
/// </value>
public bool HasChildren {
get {
if (null != Children && Children.Any()) {
m_HasChildren = true;
}
return m_HasChildren;
}
}
/// <summary>
/// Gets this SiteMaps parent.
/// </summary>
/// <value>The parent.</value>
public SiteMap Parent {
get {
if (null == m_Parent && null != _ParentId) {
m_Parent = ctx.GetSiteMap(_ParentId);
}
return m_Parent;
}
}
GetSiteMap
并GetSiteMapChildrenByPath
调用存储过程来构建层次结构,因为使用 LINQ 将其拉出将非常复杂。
于 2010-01-29T22:47:52.550 回答
0
嗨,你在这里看看我的自定义 SitMapProvider
这允许您从带有注释的元模型和非 DD 页面的单独站点地图文件中获取结构。
于 2010-05-02T11:19:04.033 回答