2010-08-25 54 views
0

我有一个由Repeater创建的asp:HyperLink的列表。当我点击其中一个HyperLinks时,我希望它将HyperLink中设置的值传递到后面的代码中,以便我知道哪个HyperLink已被点击。所以......Repeater中的ASP.NET设置值,并让它传入代码隐藏

<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

由于某些原因堆栈溢出撕掉了我写的所有html,所以这没有任何意义。

<%#的DataBinder.Eval(容器.DataItem, “姓名”)%>

静态无效passavalue(字符串值){RESPONSE.WRITE(vlaue); }

2010-08-25 15:52:25

+0

当单击HyperLink时,是否希望在没有页面刷新的情况下发生某些事情,例如。通过Ajax? – 2010-08-25 16:23:47

回答

0

在我看来,最好的办法是在为每个超链接设置的NavigationUrl中使用QueryString或Route参数...您的中继器可以使用DataBinder行为为每个链接设置自定义值<%#Eval(“ “)%>等...

+0

当他们点击超链接打开一个彩盒,我有另一个中继器,这取决于他们点击了什么,我想要在彩盒中订购中继器,以便他们点击的值首先出现。如果我使用浏览器,这将带我离开页面应用querystrin,我不想这样做。我需要它点击时运行一个方法。 – 2010-08-25 15:58:34

+0

啊,在这种情况下,你将不得不用Peter的下面的方法,或者你将需要使用类似的函数调用你的JavaScript操作..就像你的“passavalue()”.. – fdfrye 2010-08-25 16:14:55

0

一个选项是使用一个asp:linkbutton,而不是您的ItemTemplate中的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 ... 
    } 
} 
+0

我会补充说,LinkBut​​ton是一个常规的超链接,它使用JavaScript发布到服务器(模拟真正的按钮),因此具有辅助功能和搜索引擎优化问题。我会避免它在面向公众的网站上使用,但内部/内部网站很好。 – 2010-08-25 16:14:25

0

您可以通过绑定到CommandArgument一些值(可能是一个ID我猜)做到这一点。这是,你可以添加到您的RepeaterItemTemplate一个LinkButton的例子:

<ItemTemplate> 
    <div> 
     <asp:LinkButton ID="lbTest" runat="server" 
      CommandArgument='<%# Eval("ID") %>' Text='<%# Eval("Text") %>' 
      OnClick="lbTest_Click" /> 
    </div> 
</ItemTemplate> 

然后,您可以通过为LinkButton实施OnClick抢值服务器端。如果您愿意,您甚至可以为中继器中的所有按钮使用相同的功能,而不必担心使用RowCommand事件。

protected void lbTest_Click(object sender, EventArgs e) 
{ 
    LinkButton lb = (LinkButton)(sender); 
    string valueYouWanted = lb.CommandArgument; 
    // do something with it 
} 

编辑:基于阅读你的代码加入,如果你想坚持使用asp:HyperLink,而不是一个链接按钮,该OnClick将触发JavaScript的,而不是服务器端,所以你需要使用的<%# Eval("ID") %> (或任何您想要使用的字段)将唯一标识符添加到您的JavaScript内联。例如:

<asp:HyperLink ID="hlValue" CssClass='example8' NavigateUrl="#" 
    OnClick='passavalue(<%# Eval("YourBookID") %>)' >books</asp:hyperlink> 
+1

@phil crowe是否有这些答案适合你?如果没有,编辑你的问题,我们可以尝试提出一些更好的答案。 – Kelsey 2010-08-26 17:31:20

相关问题