【问题标题】: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>
这会在我的菜单栏中创建按钮。但是,我想在这个菜单栏中添加一些不是按钮的东西。我想添加一个文本框。如果我尝试在 <Items> 标记之间添加文本框,它会给我一个错误。这有可能实现吗?
【问题讨论】:
标签:
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 的菜单控件。然后你必须重写它的Render 或CreateChildren 方法。
然而,许多开发人员现在使用简单的ul-li HTML 元素来创建菜单。这样,您可以轻松实现任何类型的灵活性。为什么不使用它们?