使用ASP.NET转发器的动态菜单

时间:2013-11-18 09:40:17

标签: asp.net umbraco webusercontrol

目前我正在熟悉ASP.NET,并且我已经在内部动态内容问题上遇到了问题" ItemTemplate" " Repeater"。这是我的代码:

<asp:Repeater ID="sidebarRepeater" runat="server">
     <ItemTemplate>
           <li>
               <a href="#<%# DataBinder.Eval(Container.DataItem, "Id") %>"><%# DataBinder.Eval(Container.DataItem, "Name") %></a>
           </li>
      </ItemTemplate>
</asp:Repeater>

我正在获取一个链接列表,其中包含当前项目的href == Id以及此项目的文本。 问题是,我需要一个&#34; Onclick&#34;每个链接的asp.net处理程序(这是&#34; Master&#34;用户控件的菜单,每次点击我将根据master中选择的项目更改子用户控件的内容。)

任何提示?

编辑:我已经尝试使用LinkBut​​ton,如:

<li>
    <asp:LinkButton ID='<%# DataBinder.Eval(Container.DataItem, "Id") %>' runat="server" OnClick="ChangeSomething">
        <%# DataBinder.Eval(Container.DataItem, "Name") %>
    </asp:LinkButton>
</li>

Edit2:目前我的标记看起来像这样:

<li>
    <input type="hidden" value="<%# DataBinder.Eval(Container.DataItem, "Id") %>"
    <asp:LinkButton runat="server" ID="LinkButton_Office" Text='<%# DataBinder.Eval(Container.DataItem, "Name") %>'/>
</li>

在这种情况下,它只绘制一个&#34;隐藏的输入&#34;元素仅适用于转发器中的第一项。

Edit3:我目前拥有的完整列表(仅<li></li>呈现到实际HTML中):

<div class="row">
    <div class="twelve column">
        <div class="row">
            <div class="side-bar">
                <nav>
                    <ul>
                <asp:Repeater ID="sidebarRepeater" runat="server">
                    <ItemTemplate>
                        <li>
                            <asp:LinkButton ID="linkSidebar" runat="server" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Id") %>' Text='<%# DataBinder.Eval(Container.DataItem, "Name") %>' OnClick="linkMenu_Click"></asp:LinkButton>
                        </li>
                    </ItemTemplate>
                </asp:Repeater>
                    </ul>
                </nav>
            </div>
            <div class="page">
                <asp:PlaceHolder runat="server" ID="contentPlaceholder" />
            </div>
        </div>
    </div>
</div>

我也忘了说,这实际上是Umbraco项目的.Net用户控件。 数据源以protected void Page_Load(object sender, EventArgs e)方法附加到转发器。

2 个答案:

答案 0 :(得分:1)

请尝试这样

<asp:Repeater ID="sidebarRepeater" runat="server">
    <ItemTemplate>
        <asp:LinkButton ID="linkMenu" runat="server" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Id") %>' Text='<%# DataBinder.Eval(Container.DataItem, "Name") %>' OnClick="linkMenu_Click"></asp:LinkButton>
    </ItemTemplate>
</asp:Repeater>

这将在文字属性中的 CommandArgument 和“名称”字段中保留“Id”字段

在linkMenu_Click事件handeler中,您将获取Id和Name值作为示例代码

protected void linkMenu_Click(object sender, EventArgs e)
{
    LinkButton link = (LinkButton)sender;
    string id = link.CommandArgument;
    string name = link.Text;

    //Implement the different display of each menu here ...
}

答案 1 :(得分:0)

通过在<form runat="server">标记周围添加<nav>来解决问题。 似乎每个<asp:button\linkbutton>都需要这些才能正常工作。