0

私のアプリケーションにはさまざまなユーザーがいて、現在、さまざまなマスターページが設定されています。アイデアは、システム内のある種のブレッドクラム、つまりホーム>詳細> ...です。

これに最適なアプローチは何ですか?各ユーザーが持つことができる個別のパス (表示できるすべてのページ) を Web.sitemap (複数の SiteMapPath を持つ) で定義し、サイトマップ コントロールを masterpage に追加して、それらを適切な SiteMapPath にリンクする必要があると思います。これはこれにアプローチする正しい方法のように聞こえますか?

マスターページ内の SiteMapPath の設定に問題があります。次のチュートリアルhttp://geekswithblogs.net/azamsharp/archive/2006/08/16/88197.aspxを使用してコントロールを使用しようとしましたが、ログイン時に SiteMapPath コントロールがマスターページに表示されません問題は何ですか?

Web.sitemap:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >

      <siteMapNode url="home.aspx" title=""  description="">
        <siteMapNode url="contacts.aspx" title=""  description="">   
    </siteMapNode>

</siteMap>

マスターページで:

<asp:SiteMapPath ID="SiteMapPath1" runat="server">

          <RootNodeTemplate>

          <asp:HyperLink ID="HyperLink1" runat="server"
          Text='<%# Eval("title") %>' NavigateUrl='<%# Eval("url") %>' />

          </RootNodeTemplate>

          <NodeTemplate>
            <asp:HyperLink ID="HyperLink2" runat="server"
            Text='<%# Eval("title") %>' NavigateUrl='<%# Eval("url") %>' />
          </NodeTemplate>

          </asp:SiteMapPath>

ありがとうございました

4

1 に答える 1

0

FormsAuthentication を使用して、ユーザーがナビゲートできるページのユーザーの承認を制御している場合は、ロールも含めることをお勧めします。次に、sitemapprovider で securityTrimmingEnabled="ture" を使用します。そうすれば、ユーザーごとに個別のサイトマップは必要ありません。

これがどのように機能するかの基本です:

また、試したことが機能しない理由を知るために、いくつかのコードを共有することもできます。

編集:1

これが機能するために組み込みの Roles プロバイダーは必要ありませんが、UserPrincipal にロールを追加する必要があります。その方法はここに示されて いますが、データベース内のユーザーに対して admin が true の場合、true 値ごとにロールを文字列として返すコードを記述する必要があります。つまり、「admin」です。次に、リンクに示されているように、これらのロールをユーザー プリンシパルに追加すると、最初のリンクと組み合わせて機能するはずです。

編集:2 SiteMap が機能するために複雑なコードは必要ありません。ページにドロップするだけで、.sitemap ファイルに基づいて機能します。また、sitemapnode に title="" があり、それを何らかの値に設定します。

于 2011-03-25T20:21:07.980 に答える