LINQTOSQL を利用した動的日付フレームワークのブレッドクラムを動的に生成する動的ブレッドクラム コントロールを作成する方法について、いくつかの例またはアイデアが必要です
2484 次
2 に答える
1
おそらく次の 3 つが必要です。
- データベースの階層構造*
- 階層を読み取るための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 に答える