我有一个由asp:HyperLink
创建的Repeater
列表。当我点击其中一个HyperLinks
时,我希望它将HyperLink
中设置的值传递给后面的代码,以便我知道哪个HyperLink
已被点击。所以......
<asp:Repeater id="rpt1" runat="server">
...some rows of HyperLinks..
<li><asp:HyperLink ID="hlValue" CssClass='example8' NavigateUrl="#"
OnClick="passavalue(books)" >books</asp:hyperlink></li>
...
</asp:repeater>
C#
static void passavalue(string value)
{
response.Write(vlaue);
}
我知道这不会工作我只是想解释我想要做的事情。
答案 0 :(得分:0)
我认为您最好的选择是在为每个超链接设置的NavigationUrl中使用QueryString或Route参数...您的转发器可以使用DataBinder行为&lt;%#Eval(“设置每个链接的自定义值“)%&gt;等...
答案 1 :(得分:0)
一种选择是在ItemTemplate中使用 asp:linkbutton 而不是asp:超链接。
<asp:LinkButton runat="server" ID="DoSomethingLink" CommandName="DoSomething" CommandArgument='<%# Eval("Name") %>'><%# DataBinder.Eval(Container.DataItem, "Name") %></asp:LinkButton>
然后您将处理Repeater的ItemCommand事件。
protected void YourRepeater_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "DoSomething")
{
var arg = e.CommandArgument;
// do something ...
}
}
答案 2 :(得分:0)
你可以通过绑定CommandArgument
某个值(可能是我猜的ID)来做到这一点。以下是您可以添加到LinkButton
Repeater
的{{1}}示例:
ItemTemplate
然后,您可以通过为<ItemTemplate>
<div>
<asp:LinkButton ID="lbTest" runat="server"
CommandArgument='<%# Eval("ID") %>' Text='<%# Eval("Text") %>'
OnClick="lbTest_Click" />
</div>
</ItemTemplate>
实施OnClick
来获取值服务器端。如果您愿意,甚至可以为转发器中的所有按钮提供相同的功能,而不必为LinkButton
事件烦恼。
RowCommand
修改:根据您添加的代码,如果您想坚持使用protected void lbTest_Click(object sender, EventArgs e)
{
LinkButton lb = (LinkButton)(sender);
string valueYouWanted = lb.CommandArgument;
// do something with it
}
而不是链接按钮,asp:HyperLink
将触发javascript,而不是服务器因此您需要使用OnClick
(或您想要使用的任何字段)将唯一标识符添加到您的javascript内联中。例如:
<%# Eval("ID") %>