3

我需要一些关于如何创建动态面包屑控件的示例或想法,该控件将为由 LINQTOSQL 提供支持的动态日期框架动态生成面包屑

4

2 回答 2

1

你可能需要三样东西:

  1. 数据库中的层次结构*
  2. 基于StaticSiteMapProvider的自定义 SiteMap 提供程序,用于读取层次结构
  3. 用于显示面包屑导航的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;
  }
}

GetSiteMapGetSiteMapChildrenByPath调用存储过程来构建层次结构,因为使用 LINQ 将其拉出将非常复杂。

于 2010-01-29T22:47:52.550 回答
0

嗨,你在这里看看我的自定义 SitMapProvider

这允许您从带有注释的元模型和非 DD 页面的单独站点地图文件中获取结构。

于 2010-05-02T11:19:04.033 回答