Получить MenuItem в динамически создаваемом меню в asp.net - PullRequest
0 голосов
/ 24 июня 2010

Я использую управление меню в asp.net.Я создаю элемент управления меню с использованием привязки данных XML.
Вот XML-файл;

 <?xml version="1.0" encoding="utf-8" ?>
    <Items Text="">
      <Item Text="" ImgPath="./../images/home.gif"  Url="" Value="Home"   />
      <Item Text="" ImgPath="" Url="" Value="Time Entry" >
        <Item Text="" Value="Our Clients" ImgPath="./../images/oc.gif" Url="~/OurClients.aspx" />
      </Item>
      <Item Text="" ImgPath="" Value="Admin" Url="">
        <Item Text="" Value="About Us" ImgPath="./../images/AboutUs.gif" Url ="~/AboutUs.aspx" />
      </Item>
    </Items>


Для создания меню на странице .aspx я использую;

<asp:Menu ID="Menu1" runat="server" Orientation="Horizontal" DisappearAfter="10"
    Width="300px" DataSourceID="XmlDataSource1" StaticEnableDefaultPopOutImage="False" OnMenuItemClick="Menu1_MenuItemClick">
    <StaticMenuItemStyle CssClass="MenuItem" />
    <DynamicHoverStyle CssClass="SubMenuItemHover" />
    <DynamicMenuItemStyle CssClass="SubMenuItem" />
    <StaticHoverStyle CssClass="MenuItemHover" />
    <DataBindings>
        <asp:MenuItemBinding DataMember="Item" NavigateUrlField="Url" TextField="Text" ImageUrlField="ImgPath" ValueField="Value" />
    </DataBindings>
</asp:Menu>


Теперь я пытаюсь получить MenuItem из этого элемента управления Menu.Для этого при загрузке страницы я использую:

 MenuItem mn = Menu1.FindItem("Home");


Но он возвращает ноль.
Пожалуйста, помогите мне найти решение.
Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 27 марта 2012

Для доступа к меню главной страницы из-за пределов кодового файла главной страницы создайте открытое свойство для вашей переменной меню (в вашем примере Menu1) в кодовом файле вашей главной страницы:

Public ReadOnly Property MyMenu As Menu
    Get
        Return Menu1
    End Get
End Property

тогда вы сможете получить доступ к своему меню, не используя методы поиска, такие как findcontrol () с дочерних страниц, используя следующий код:

DirectCast(Page.Master, <yourmaterpagename>).MyMenu

в этом случае вы никогда больше не будете сталкиваться с нулевыми проблемами, потому что вы возвращаете именно то, что запрашиваете, за исключением случаев, когда вы вызываете эту строку кода перед инициализацией объекта Menu1.

1 голос
/ 24 июня 2010

Когда вы декларативно устанавливаете DataSourceID элемента управления (то есть устанавливаете его в aspx), элемент управления не привязывается к данным до события prerender страницы.Попробуйте вызвать метод привязки данных меню, прежде чем вызывать его метод FindItem.

Вы также можете подождать, пока не сработает событие PreRenderComplete, и запустить там свой код, если это не слишком поздно.

Страница жизненного цикла

...