【发布时间】:2013-11-18 09:40:17
【问题描述】:
目前我正在熟悉 ASP.NET,但我遇到了“Repeater”的“ItemTemplate”中动态内容的问题。这是我的代码:
<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 和该项目的文本。 问题是,我需要每个链接的“Onclick”asp.net 处理程序(这是“主”用户控件的菜单,每次单击时,我将根据主控中的选定项目更改子用户控件的内容)。
有什么建议吗?
编辑:我已经尝试过像这样使用 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>
在这种情况下,它只为转发器中的第一项绘制“隐藏输入”元素。
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) 方法中为转发器附加数据源。
【问题讨论】:
-
你为什么不改用
LinkButton? -
我试过这样做,但我不知道如何正确插入我列出的代码的 ID 和名称。当我通过 DataBinder.Eval 插入 LinkButton 的这个“a”标签时,它只是没有呈现。
-
您不需要将所有信息放入您的
LinkButton,您只需要知道单击了哪个项目,其余的可以从可能隐藏的其他控件中获取(例如@ 987654329@ 你可以使用HiddenField)。您可以通过FindControl在LinkButton的NamimgContainer上的Click事件中获得其他控件。 -
如何根据中继器中的当前项目为其设置文本?
-
您通过
DataBinder.Eval(如上)或通过代码隐藏(ItemDataBound事件)设置文本。
标签: asp.net umbraco webusercontrol