【发布时间】:2010-01-29 21:32:04
【问题描述】:
我需要一些关于如何创建动态面包屑控件的示例或想法,该控件将为由 LINQTOSQL 提供支持的动态日期框架动态生成面包屑
【问题讨论】:
标签: asp.net linq-to-sql dynamic-data breadcrumbs asp.net-dynamic-data
我需要一些关于如何创建动态面包屑控件的示例或想法,该控件将为由 LINQTOSQL 提供支持的动态日期框架动态生成面包屑
【问题讨论】:
标签: asp.net linq-to-sql dynamic-data breadcrumbs asp.net-dynamic-data
你可能需要三样东西:
* 当我想为客户站点提供类似的东西时,我做了一些搜索,并决定将路径结构存储在数据库中是最简单的 - 我已经为任意深度的站点地图提供了 answer previously here -请注意,如果您使用的是 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 将其拉出会非常复杂。
【讨论】:
嗨,你看过我的自定义 SitMapProvider here
这允许您从带有注释的元模型和非 DD 页面的单独站点地图文件中获取结构。
【讨论】: