Удалить дочерний узел из карты сайта на главной странице - PullRequest
1 голос
/ 21 декабря 2011

Я использую asp: Меню для отображения меню. Элемент управления меню использует карту сайта в качестве источника данных. Теперь я хочу удалить некоторые дочерние узлы из узла карты сайта на основании разрешения. Я пытался манипулировать Mennuitems, но не смог удалить этот дочерний узел.

Это код для моего меню

<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>

Это код моей карты сайта

<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>

Я хочу удалить узел ниже на основании разрешения

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

Я попробовал следующий метод.

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);
        }

    }
}

Я пробовал это также в методах загрузки страницы и prerender, но узел все еще находится там, когда страница загружена.

Как я могу это удалить .?

1 Ответ

2 голосов
/ 21 декабря 2011

Я думаю, что правильный способ реализовать это в DataBound-Event элемента управления меню:

<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-Event находит элементы, но, похоже, больше не может влиять на состояние элементов управления (возможно, потому, что оно предназначено для других целей).

...