2011-12-21 16 views
1

私はasp:Menuを使用してメニューバーを表示しています。メニューコントロールは、サイトマップをデータソースとして使用します。今私は許可に基づいてサイトマップノードからいくつかの子ノードを削除したいと思います。私はMennuitemsを操作しようとしましたが、その子ノードを削除できませんでした。マスターページのサイトマップから子ノードを削除します

これは、これは私が私が許可

<siteMapNode url="~/_PL/SPONSOR/Site.aspx" title="Add/Update Site Info." description="Add/Update Site Information" id="Add"/> 

に基づいて、ノードの下に削除したい私のサイトマップ

<siteMapNode url="~/_PL/SPONSOR/Default.aspx" title="SPONSOR" description="SPONSOR"> 
    <siteMapNode url="~/_PL/SPONSOR/Home.aspx" title="HOME" description="HOME" /> 
    <siteMapNode url="~/_PL/SPONSOR/Default.aspx?0" title="Dash Board" description="Dash Board" /> 
    <siteMapNode url="~/_PL/SPONSOR/SiteViewAll.aspx" title="Site Info." description="Site Information" id="Site"> 
     <siteMapNode url="~/_PL/SPONSOR/Site.aspx" title="Add/Update Site Info." description="Add/Update Site Information" id="Add"/> 
     <siteMapNode url="~/_PL/SPONSOR/SiteViewAll.aspx?0" title="View Site Info." description="View Site Information" /> 
    </siteMapNode> 


    <siteMapNode url="~/_PL/SPONSOR/UserViewAll.aspx" title="User Info." description="User Info" > 
     <siteMapNode url="~/_PL/SPONSOR/User.aspx?New" title="Add/Update User Info." description="Add/Update User Information" /> 
     <siteMapNode url="~/_PL/SPONSOR/UserViewHirerchical.aspx" title="View Hirerchical User" description="View Hirerchical User Information" /> 
     <siteMapNode url="~/_PL/SPONSOR/UserViewAll.aspx?0" title="View User Info." description="View User Information" /> 
    </siteMapNode> 
    <!--<siteMapNode url="~/_PL/SPONSOR/CRFProtocol.aspx" title="CRF Protocol" description="CRF Protocol" />--> 
    <siteMapNode url="~/_PL/SPONSOR/eCRFDownload.aspx" title="CRF Download Forms" description="CRF Download Forms" /> 
    <siteMapNode url="~/_PL/SPONSOR/LogSheet.aspx" title="Log Sheet" description="Log Sheet" /> 
    <siteMapNode url="~/Default.aspx?logout=SPONSOR" title="Logout" description="Logout" /> 
</siteMapNode> 

にコードされ、私のメニューコントロールのコード

<td class="TRMenu" valign="middle" align="left"> 
    <asp:Menu ID="menu" runat="server" CssClass="menu" EnableViewState="False" Orientation="Horizontal" 
       DataSourceID="newSiteMap"> 
    </asp:Menu> 
    <asp:SiteMapDataSource ID="newSiteMap" runat="server" ShowStartingNode="False" StartingNodeUrl="~/_PL/SPONSOR/Default.aspx" /> 
</td> 

です次の方法を試した。

protected void Page_Unload(object sender, EventArgs e) 
{ 

    foreach (MenuItem Item in menu.Items) 
    { 
     if (Item.Text.Contains("Site")) 
     { 
      string str = Item.ChildItems[0].Text; 
      Item.ChildItems.RemoveAt(0); 
     } 

    } 
} 

ページの読み込みとプリレンダリングの方法でもこれを試しましたが、ページが読み込まれたときにもノードがあります。

どうすれば削除できますか?

答えて

2

私はそれを実装するための正しい方法は、メニュー・コントロールのデータバインド・イベントであると思う:

<asp:Menu ID="menu" runat="server" EnableViewState="False" Orientation="Horizontal" OnDataBound="Menu_DataBound" DataSourceID="newSiteMap"> 


protected void Menu_DataBound(object sender, EventArgs e) 
{ 
    foreach (MenuItem item in menu.Items) 
    { 
     if (Item.Text.Contains("Site")) 
     { 
     string str = Item.ChildItems[0].Text; 
     Item.ChildItems.RemoveAt(0); 
     } 

    } 
} 

Page.Unload-イベントアイテムを見つけたがではないようですコントロールの状態にもう影響を与えることができます(おそらく他のもののためであるためです)。

関連する問題