- PR -

TreeView:フォルダ(親ノード?)の時だけリンクを無くしたい

投稿者投稿内容
未記入
常連さん
会議室デビュー日: 2007/08/21
投稿数: 48
投稿日時: 2007-08-31 18:12
お世話になっております。
連続投稿すみません。

VS2005(VB)でWEBサイトを作っています。

メニューをTreeView(オートフォーマット:XPファイルエクスプローラー)で作っているのですが
デバッグ中にフォルダーの部分をクリックするとフォルダーの中身を一覧表示してしまいます。
一覧表示は開発サーバーの設定に問題があるせいだと思います。
本番環境ではディレクトリー一覧の表示はさせないようにIISの設定をする予定ですが、そうなると
今のままではアクセスエラーになってしまうような気がします。

フォルダ(親ノード?)の時だけリンクでは無いようにする方法を教えてください。

Web.sitemapは下記のようにしています。
ルート(Default.aspx)はリンクにしたいのですが、メンバー専用(members)と
マスター管理(master)はクリックしても画面遷移させたくありません。
ポストバックで何もしないという方法があるのかも知れませんが、そもそも
リンクでなければ利用者に勘違いさせなくて済むのでそうしたいです。

よろしくお願いします。


<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
 <siteMapNode url="Default.aspx" title="XX情報検索" description="XX情報検索">
  <siteMapNode url="Search.aspx" title="検索" description="検索" />
  <siteMapNode url="members" title="メンバー専用" description="メンバー専用">
    <siteMapNode url="members/Search.aspx" title="検索" description="検索" />
    <siteMapNode url="members/Default2.aspx" title="詳細" description="詳細" />
    <siteMapNode url="members/UserProfile.aspx" title="利用者情報" description="利用者情報" />
  </siteMapNode>
  <siteMapNode url="master" title="マスター管理" description="マスター管理">
    <siteMapNode url="master/admins/MstLoc01.aspx" title="XXマスター" description="XXマスター" />
  </siteMapNode>
</siteMap>
プレマニア
常連さん
会議室デビュー日: 2007/08/24
投稿数: 34
投稿日時: 2007-09-01 14:04
こんにちはプレマニアと申します。

質問の意図をはずしているかもしれませんが、サイトマップの中で
リンクにしたくないノードにurlを指定しなければよいのではありませんか?
未記入
常連さん
会議室デビュー日: 2007/08/21
投稿数: 48
投稿日時: 2007-09-02 12:02
引用:

プレマニアさんの書き込み (2007-09-01 14:04) より:
こんにちはプレマニアと申します。

質問の意図をはずしているかもしれませんが、サイトマップの中で
リンクにしたくないノードにurlを指定しなければよいのではありませんか?



私も最初はそのように考えてやって見ましたが、ノードそのものも表示されなくなってしまうのでその方法では駄目なようです。
プレマニア
常連さん
会議室デビュー日: 2007/08/24
投稿数: 34
投稿日時: 2007-09-02 16:27
引用:

未記入さんの書き込み (2007-09-02 12:02) より:

私も最初はそのように考えてやって見ましたが、ノードそのものも表示されなくなってしまうのでその方法では駄目なようです。


むむ、ダメでしたか・・・。

  • Microsoft Visual Web Developer 2005 Express Edition - JPN
  • Windows XP Home Edition

だけでいいかな。この環境でやってみると、
コード:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode url="Default.aspx" title="XX情報検索" description="XX情報検索">
    <siteMapNode url="Search.aspx" title="検索" description="検索" />
    <siteMapNode url="members" title="メンバー専用" description="メンバー専用">
      <siteMapNode url="members/Search.aspx" title="検索" description="検索" />
      <siteMapNode url="members/Default2.aspx" title="詳細" description="詳細" />
      <siteMapNode url="members/UserProfile.aspx" title="利用者情報" description="利用者情報" />
    </siteMapNode>
    <siteMapNode title="マスター管理" description="マスター管理">
      <siteMapNode url="master/admins/MstLoc01.aspx" title="XXマスター" description="XXマスター" />
    </siteMapNode>
  </siteMapNode>
</siteMap>


をサイトマップに指定したとき、url指定をはずした「マスター管理」のところには
文字列と折りたたみのマークだけがついたのでイケるかなと思ったのですが。

そういうことではないのですね。

失礼しました。
未記入
常連さん
会議室デビュー日: 2007/08/21
投稿数: 48
投稿日時: 2007-09-02 18:51
引用:


  • Microsoft Visual Web Developer 2005 Express Edition - JPN
  • Windows XP Home Edition

だけでいいかな。



たいした違いではないと思いますが、

  • Microsoft Visual Web Developer 2005 Express Edition - JPN
  • Windows XP Professional Edition

です。


引用:

この環境でやってみると、
コード:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode url="Default.aspx" title="XX情報検索" description="XX情報検索">
    <siteMapNode url="Search.aspx" title="検索" description="検索" />
    <siteMapNode url="members" title="メンバー専用" description="メンバー専用">
      <siteMapNode url="members/Search.aspx" title="検索" description="検索" />
      <siteMapNode url="members/Default2.aspx" title="詳細" description="詳細" />
      <siteMapNode url="members/UserProfile.aspx" title="利用者情報" description="利用者情報" />
    </siteMapNode>
    <siteMapNode title="マスター管理" description="マスター管理">
      <siteMapNode url="master/admins/MstLoc01.aspx" title="XXマスター" description="XXマスター" />
    </siteMapNode>
  </siteMapNode>
</siteMap>


をサイトマップに指定したとき、url指定をはずした「マスター管理」のところには
文字列と折りたたみのマークだけがついたのでイケるかなと思ったのですが。

そういうことではないのですね。

失礼しました。



プレマニア様のようになることが望みなのですが、上記のコードをカット&ペーストして実行すると私の環境では「マスター管理」のフォルダーごと表示されなくなってしまいます。
セキュリティーでアクセス権をつけているのが関係しているのでしょうか?
プレマニア
常連さん
会議室デビュー日: 2007/08/24
投稿数: 34
投稿日時: 2007-09-02 19:38
引用:

プレマニア様のようになることが望みなのですが、上記のコードをカット&ペーストして実行すると私の環境では「マスター管理」のフォルダーごと表示されなくなってしまいます。
セキュリティーでアクセス権をつけているのが関係しているのでしょうか?


直感ですが関係ない気がします。私は「Default.aspx」だけ作って「TreeView」を
貼り付けただけですが、いちおうコードを残しておきます。
コード:
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TreeView id="SiteTreeView" 
        DataSourceID="SiteMapSource"
        AutoGenerateDataBindings="False"
        runat="server">
        </asp:TreeView>
    </div>
    <asp:SiteMapDataSource ID="SiteMapSource" runat="server"/>
    </form>
</body>


「AutoGenerateDataBindings="False"」なんて怪しげです。
私も知りたいので考えてみます。何かわかったら教えてくださいね。
未記入
常連さん
会議室デビュー日: 2007/08/21
投稿数: 48
投稿日時: 2007-09-03 10:56
引用:

直感ですが関係ない気がします。私は「Default.aspx」だけ作って「TreeView」を
貼り付けただけですが、いちおうコードを残しておきます。



念のためお尋ねしますがweb.configに下記のコードはありますでしょうか?
これがないとセキュリティトリミングが効かないのでメニューは非表示にできないと思います。
私のところでも新規にサイトを作成してweb.configにセキュリティトリミングの記述をする前はプレマニア様と同じ結果になりましたが、これだとアクセス権の無い人にメニューが見えてしまうのでやりたいこととはちょっと違ってしまいます。

<siteMap defaultProvider="TrimSiteMapProvider" enabled="true">
<providers>
<add name="TrimSiteMapProvider" securityTrimmingEnabled="true"
type="System.Web.XmlSiteMapProvider" siteMapFile="Web.sitemap" />
</providers>
</siteMap>
プレマニア
常連さん
会議室デビュー日: 2007/08/24
投稿数: 34
投稿日時: 2007-09-04 08:53
引用:

未記入さんの書き込み (2007-09-03 10:56) より:
引用:

直感ですが関係ない気がします。私は「Default.aspx」だけ作って「TreeView」を
貼り付けただけですが、いちおうコードを残しておきます。



念のためお尋ねしますがweb.configに下記のコードはありますでしょうか?
これがないとセキュリティトリミングが効かないのでメニューは非表示にできないと思います。
私のところでも新規にサイトを作成してweb.configにセキュリティトリミングの記述をする前はプレマニア様と同じ結果になりましたが、これだとアクセス権の無い人にメニューが見えてしまうのでやりたいこととはちょっと違ってしまいます。

<siteMap defaultProvider="TrimSiteMapProvider" enabled="true">
<providers>
<add name="TrimSiteMapProvider" securityTrimmingEnabled="true"
type="System.Web.XmlSiteMapProvider" siteMapFile="Web.sitemap" />
</providers>
</siteMap>



あ、それは認識していませんでした。ので、記載もしていません。ごめんなさい。
http://msdn2.microsoft.com/ja-jp/library/system.web.sitemapprovider.isaccessibletouser(VS.80).aspx
となると、きっと私の直感は間違っていて上記のページの解説に従い、

  • urlを記載していない
  • 「SiteMapNode」自体にRolesが設定されていない

ことからフィルタリングで表示されなくなってしまうのではないでしょうか。

この判断が正しい場合、

  1. 「SiteMapNode」に誰でもアクセスできるようrolesを追加してurlをつけない
  2. サイト構成を見直してディレクトリだけというノードがないようにする

私が思いつく対策はこのぐらいでしょうか。
ただ、やったことがなく今すぐは試せないのが申し訳ありません。

他の有識者の方から返答があればよいのですが。

スキルアップ/キャリアアップ(JOB@IT)