【问题标题】:Add a TextBox to an ASP.Net Menu将文本框添加到 ASP.Net 菜单
【发布时间】:2012-01-16 22:54:36
【问题描述】:

现在我有以下代码:

<div class="clear hideSkiplink">
            <asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal">
                <Items>
                    <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home"/>
                    <asp:MenuItem NavigateUrl="~/CreatePost.aspx" Text="Create Post"/>
                    <asp:MenuItem NavigateUrl="~/About.aspx" Text="About"/>
                </Items>
            </asp:Menu>
        </div>

这会在我的菜单栏中创建按钮。但是,我想在这个菜单栏中添加一些不是按钮的东西。我想添加一个文本框。如果我尝试在 &lt;Items&gt; 标记之间添加文本框,它会给我一个错误。这有可能实现吗?

【问题讨论】:

    标签: html asp.net webforms


    【解决方案1】:

    您可以使用项目模板为您的菜单项提供自定义外观。例如:

    <asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false"
        IncludeStyleBlock="false" Orientation="Horizontal">
        <Items>
            <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home" />
            <asp:MenuItem NavigateUrl="~/CreatePost.aspx" Text="Create Post" />
            <asp:MenuItem NavigateUrl="~/About.aspx" Text="About" />
        </Items>
        <StaticItemTemplate>
            <%-- Custom menu item content --%>
            <asp:Label runat="server" Text='<%# Eval("Text") %>' />
            <asp:TextBox runat="server" Text='<%# Eval("NavigateUrl") %>' />
        </StaticItemTemplate>
    </asp:Menu>
    

    这会产生类似这样的结果:

    我建议您阅读有关菜单控件的模板选项。


    编辑回应评论:

    我认为一旦定义了模板,就不可能有选择地应用它。您可能需要另一个具有不同模板的菜单才能看起来不同。或者,您可以使用Visible 属性的条件在某种程度上实现不同菜单项的不同外观,例如:

    <StaticItemTemplate>
        <asp:Label runat="server" Text='<%# Eval("Text") %>' />
        <%-- Display textbox only for the Home menu item --%>
        <asp:TextBox runat="server" Text='<%# Eval("NavigateUrl") %>'
            Visible='<%# (Eval("Text") == "Home") %>' />
    </StaticItemTemplate>
    

    您可以通过这种方式隐藏或显示整个面板或占位符,以将整个内容替换为特定菜单项。

    【讨论】:

    • 有没有办法应用这个,以便它为菜单项之一做这一切?
    【解决方案2】:

    我想到的唯一方法是创建一个自定义菜单控件,派生自 ASP.NET 的菜单控件。然后你必须重写它的RenderCreateChildren 方法。

    然而,许多开发人员现在使用简单的ul-li HTML 元素来创建菜单。这样,您可以轻松实现任何类型的灵活性。为什么不使用它们?

    【讨论】:

      猜你喜欢
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 2012-01-17
      • 2011-05-12
      相关资源
      最近更新 更多