在asp.net中动态创建的Menu中获取MenuItem

发布于 2024-09-07 05:16:34 字数 1553 浏览 9 评论 0原文

我正在 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>


现在,我尝试从此 Menu 控件获取 MenuItem。为此,在页面加载时,我使用 ;

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


但是,它返回 null。
请帮我找到解决方案。
提前致谢。

I am using Menu control in asp.net. I am creating Menu control using xml databinding.

Here is the xml file;

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

For creating menu, in .aspx page, I am using;

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

Now, I am trying to get MenuItem from this Menu control. For that, on page load, I am using ;

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

But, it is returning null.

Please help me to get the solution.

Thanks in Advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

樱花细雨 2024-09-14 05:16:34

要从母版页代码文件外部访问母版页菜单,请在母版页代码文件中为菜单变量(示例中的 Menu1)创建一个公共属性:

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

然后您将能够访问菜单,而无需使用 findcontrol() 等搜索方法通过使用以下代码从子页面中调用:

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

在这种情况下,您永远不会再遇到 null 问题,因为您返回的正是您所请求的内容,除非您在初始化 Menu1 对象之前调用这行代码。

For accesing your masterpage menu from outside of master page code file create a public property for your menu variable (Menu1 in your example) in your master page code file:

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

then you will be able to access your menu without using search methods like findcontrol() from child pages by using the following code:

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

in this case you never get into null problems anymore because you are returning exactly what you're requesting except when you call this line of code before initialization of Menu1 object.

柏林苍穹下 2024-09-14 05:16:34

当您以声明方式设置控件的 DataSourceID(即在 aspx 中设置)时,该控件在页面的预呈现事件之前不会进行数据绑定。在调用菜单的 FindItem 方法之前,尝试调用菜单的 databind 方法。

您还可以等到 PreRenderComplete 事件被触发并在那里运行您的代码,只要还不算太晚。

页面生命周期

When you declaratively set a controls DataSourceID (i.e. set it in the aspx), the control is not databound until the page's prerender event. Try call the menu's databind method before you call its FindItem method.

You could also wait until the PreRenderComplete event is fired and run your code there, as long as that isn't too late.

Page Life Cycle

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文