目前我正在熟悉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中选择的项目更改子用户控件的内容。)
任何提示?
编辑:我已经尝试使用LinkButton,如:
<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)
方法附加到转发器。
答案 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>
都需要这些才能正常工作。