ASP.NET在Repeater中设置值并将其传递给代码隐藏

时间:2010-08-25 15:50:04

标签: c# asp.net repeater hyperlink

我有一个由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);
}

我知道这不会工作我只是想解释我想要做的事情。

3 个答案:

答案 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") %>