1

ユーザーが異なる役割を持つダッシュボードのような Web アプリケーションを実装しています。ユーザーがダッシュボード内のさまざまなページを閲覧するときに、ページの上部にサイト マップ パスを表示する必要があります。asp.net SiteMapPath を使用していますが、複数のルート ノードに使用するにはどうすればよいですか。ユーザーの役割ごとに複数のルート ノードを実装する必要があります。

例:- Admin->Directory1->Directory2->Page1.aspx

Teacher->Directory1->Page2.aspx

Student->Directory2->Page1.aspx など。

Admin、Teacher、および Student は、パスのルート ノードです。

Admin->Teacher->Directory1->Page2.aspx のようであってはなりません

解決策はありますか?

ありがとう。

4

2 に答える 2

1

管理者をルートノードとして使用し、 ですべてを定義できasp:Menuます。この場合、 を使用<asp:Menu ID="mainMenu" DataSourceId="siteMapDataSource" runat="server" StaticDisplayLevels="2" StaticSubMenuIndent="0" /> して、StaticDisplayLevels="2"管理者、教師、生徒が常に表示されるようにします。インデントは、デフォルトで定義されているように、インデントされて表示されないようにします。 .

于 2013-07-09T12:35:02.140 に答える
0
  • 3つのサイトマップファイル(管理者、教師、学生用)これらのサイトマップファイルをApp_Dataフォルダーに配置しました。ユーザーコントロールで、使用可能なさまざまなメニューを表すパブリック列挙を作成します。

    public enum SiteMapMenus  
    

    {管理者、教師、学生、NotSet}

    • 次に、設計時にメニュータイプを設定するためのパブリックプロパティを作成しました。
SiteMapMenus eMenuToLoad = SiteMapMenus.NotSet;  
public SiteMapMenus MenuToLoad  
{  
    get { return eMenuToLoad; }  
    set { eMenuToLoad = value; }  
}  
  • ここで、GetMenuDataSourceメソッドは必要なサイトマップファイルをXMLファイルとして読み取り、コントロールにバインドできるデータソースを作成して返します。

    XmlDataSource GetMenuDataSource(SiteMapMenus menu, string serverMapPath)  
    {  
        XmlDataSource objData = new XmlDataSource();  
        objData.XPath = "siteMap/siteMapNode";  
       switch (menu)  
       {  
    case SiteMapMenus.Admin:objData.DataFile=serverMapPath + @"\App_Data\Admin.sitemap";  
            break;  
        case SiteMapMenus.Teacher:
    objData.DataFile=serverMapPath+@"\App_Data\Teacher.sitemap";  
                     break;  
                case SiteMapMenus.Student:
    objData.DataFile=serverMapPath+@"\App_Data\Student.sitemap";  
                    break;  
        default:  
            break;  
    }  
    objData.DataBind();  
    return objData;  
    }  
    
  • データソースはXMLになり、サイトマッププロバイダーから返された形式ではないため、メニューコントロール自体にデータバインディングを設定する必要があります。

    <asp:Menu ID="Menu1" runat="server">     
 <DataBindings>   
         <asp:MenuItemBinding DataMember="siteMapNode" 
         TextField="title" NavigateUrlField="url"  />   
    </DataBindings>   
 </asp:Menu>  
  • これで、最終的にソースをコントロールにバインドできます。これはすべて、ユーザーコントロールのPage_Loadイベントハンドラーで実行されます。

    protected void Page_Load(object sender, EventArgs e)  
      {  
         Menu1.DataSource = GetMenuDataSource(eMenuToLoad, 
                            Server.MapPath("~"));  
         Menu1.DataBind();  
      }  
    
  • 新しいメニューの使用は、ページにユーザーコントロールを登録し、MenuToLoadプロパティを設定して表示するメニューを指定するのと同じくらい簡単です。

       <DW:MyMenu ID="MyMenu1" runat="server" MenuToLoad="Secure" />
    

これで、ユーザーごとに異なるサイトマップを使用できます。

于 2013-02-18T13:23:14.210 に答える