Как создать панировочные сухари с использованием среды Dynamic Data / LINQTOSQL? - PullRequest
3 голосов
/ 30 января 2010

Мне нужны ПРИМЕРЫ или ИДЕИ о том, как создать динамический элемент управления хлебными крошками, который будет динамически генерировать хлебные крошки для каркаса Dynamic Date на основе LINQTOSQL

Ответы [ 2 ]

1 голос
/ 30 января 2010

Вам, вероятно, понадобятся три вещи:

  1. Структура иерархии в вашей базе данных *
  2. Пользовательский поставщик SiteMap на основе StaticSiteMapProvider для чтения иерархии
  3. A SiteMapPath элемент управления для отображения Breadcrumb.

* Я немного поэкспериментировал, когда хотел что-то похожее для клиентского сайта, и решил, что хранить структуру пути в базе данных будет проще всего - я дал здесь ответ , ранее карта сайта произвольной глубины - обратите внимание, что если вы используете 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 будет довольно сложно.

0 голосов
/ 02 мая 2010

Привет, вы уже видели мой пользовательский SitMapProvider здесь

Это позволяет получить структуру из метамодели с аннотацией и отдельным файлом карты сайта для страниц без DD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...