2011-12-09 62 views
2

現在我有以下代碼:一個文本框添加到一個ASP.Net菜單

<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>標記之間添加文本框,它會給我一個錯誤。這有可能實現嗎?

回答

1

我想到的唯一方法就是創建一個自定義菜單控件,該控件源自ASP.NET的菜單控件。那麼你必須重寫它的RenderCreateChildren方法。

但是,很多開發人員現在使用簡單的ul-li HTML元素來創建菜單。這樣,您可以輕鬆實現任何類型的靈活性。你爲什麼不使用它們?

3

您可以使用項目模板爲您的菜單項目提供自定義外觀。例如:

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

能產生類似這樣的結果:

example result of menu item templating

我建議你閱讀有關模板化的菜單控制選項。


編輯響應評論:

我想是不是可以有選擇地申請一次它被定義的模板。您可能需要使用不同模板的另一個菜單才能看起來不同。或者你可以實現不同的外觀不同的菜單項使用條件在一定程度上爲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> 

可以隱藏或顯示整個面板或佔位符這樣,換出特定的菜單項的全部內容。

+0

有沒有辦法將它應用到菜單項之一中? – user489041

+0

@ user489041我更新了我的答案。 – famousgarkin

相關問題