データベース?ページ変数?列挙型?
ここで意見を探しています。
ASP.NETサイトマップ機能はそのために構築されており、多くの場合にうまく機能します。メニューをサイトマップとは異なって見せたい場所にたどり着いた場合は、いくつかの回避策があります。
動的なサイト構造がある場合は、カスタムサイトマッププロバイダーを作成できます。価値以上に問題が発生する可能性がありますが、一般に、サイトマップからメニューにデータを入力すると、セキュリティトリミングなどの優れた機能が提供され、メニューオプションはログインユーザーに適しています。
これは興味深い質問です。それにアプローチする方法はたくさんあります。
XMLからメニュー構造をロードできます。これは、組み込みのASP.NETナビゲーションコントロール/「サイトマップ」セットアップが機能する方法です。これはおそらく全体的に良い選択であり、VisualStudioにはかなり良いツールがあります。
大幅に変更する必要のある動的メニューの場合は、データベースからアイテムを取得することをお勧めしますが、必ずキャッシュすることをお勧めします。そうすれば、DBがすべてのページレンダリングでヒットすることはありません。
ASP.NET Web アプリケーションのメンバーシップ/資格情報にASP.NET ログイン コントロールとフォーム認証を使用してサイトを作成しました。また、サイト ナビゲーションにサイト マップを使用しています。
SiteMapDataSource を使用して設定された ASP.NET TreeView および Menu ナビゲーション コントロールがあります。ただし、立ち入り禁止の管理者専用ページは、管理者以外のユーザーに表示されます。
web.sitemap サイト マップ ファイルを作成しました。また、ASP.NET Web サイト管理ツールを使用してアクセス ルールを設定しました。
.master ページにナビゲーション コントロールを追加しました…
<asp:SiteMapPath ID="SiteMapPath1" runat="server" />
<asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource2" />
<asp:TreeView ID="TreeView1" runat="server" DataSourceID="SiteMapDataSource1" />
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
<asp:SiteMapDataSource ID="SiteMapDataSource2" runat="server" ShowStartingNode="False" />
web.config ファイルで securityTrimmingEnabled を「true」に設定しました…
<?xml version="1.0"?>
<configuration>
...
<system.web>
...
<siteMap defaultProvider="default">
<providers>
<clear/>
<add name="default"
type="System.Web.XmlSiteMapProvider"
siteMapFile="web.sitemap"
securityTrimmingEnabled="true"/>
</providers>
</siteMap>
...
</system.web>
...
</configuration>
master.vbコードビハインドファイルのツリーを調整しました…
Protected Sub TreeView1_DataBound( ByVal sender As Object, ByVal e As EventArgs ) Handles TreeView1.DataBound
'Collapse unnecessary menu items...
If TreeView1.SelectedNode IsNot Nothing Then
Dim n As TreeNode = TreeView1.SelectedNode
TreeView1.CollapseAll()
n.Expand()
Do Until n.Parent Is Nothing
n = n.Parent
n.Expand()
Loop
Else
TreeView1.ExpandAll()
End If
End Sub
効率的なアクセスは、ユーザーの観点から見た主要な機能です。一般的な示唆的なアプローチは 辞書検索です。これは、大きくてネストされたメニュー構造にも適しています。ユーザーはクリックまたは固有のキーを押すことでナビゲートし、さらに矢印キーは通常どおり上下に移動(右)または移動(左)します。最初の要素を除いて、要求に応じてメニューにデータを入力し、最後の要素が選択されるたびにjavascriptアクションを提供することをお勧めします。
メニューがユーザーごとに動的である場合は、ユーザーごとにデータベースにアクセスする必要があります。それ以降は、データベースへの将来のラウンドトリップを回避するために、おそらくセッションに保存します。
動的であるが、サイト全体で同じアイテムが表示される場合は、それをデータベースに配置して結果をキャッシュします
サイトマップへのバインドは確かに最も簡単です。
それはサイトがどのように機能するかに完全に依存します。私は、サイトマップが通常それを行うための最良の方法であることにほとんど同意しています。ただし、CMSを使用している場合は、データベースに保持する必要がある場合があります。分類法中心のサイトがある場合は、分類法を使用してメニューを作成します。ナビゲーションを行うための「最良の方法」はなく、特定の状況に最適な方法のみです。
同様の機能があります。
表示されるメニューオプションはユーザーの権限に依存するため、アプリケーションメニューはデータベースからマスターページにロードされます。
データベースのいくつかの規則と巧妙な構造により、メニュー読み込みコードが一般的であり、特定のメニューオプションを選択すると自動的に適切な画面に移動します。ナビゲートにはUIPを使用し、WebコントロールにはComponentArtを使用します。
ところでComponentArtは最悪だ。次に、すべてのサードパーティのコントロールライブラリがそうすると思います。