从ASP.NET Repeater中的HiddenField获取正确的值

时间:2017-09-24 01:29:32

标签: c# asp.net repeater hidden-field

在我环顾四周并尝试了几个解决方案后,我决定发帖。记住我正在学习asp atm(所以我的经验很少)

所以问题如下:

我有一个asp.net转发器从数据库中提取数据。 我有一个HiddenField,我存储ID

在我背后的代码中,我尝试将ID转换为字符串,但我尝试的所有内容只返回一个ID为1的唯一ID。

Asp代码:

<asp:Repeater runat="server" ID="dataRepeater" EnableTheming="true">
    <ItemTemplate>

        <asp:HiddenField ID="prodID" runat="server" Value='<%#Eval("ProductID")%>' />

        <asp:Button runat="server" ID="addToCart" Text="Add to cart" OnClick="Something" />

    </ItemTemplate>
</asp:Repeater>  

C#代码背后:

dataRepeater.DataSource = dt;
dataRepeater.DataBind();

protected void Something(object sender, EventArgs e) {
 string pID = "";

 for (int i = 0; i < dataRepeater.Items.Count; i++) {
  var item = dataRepeater.Items[i];

  var hf = item.FindControl("prodID") as HiddenField;
  pID = hf.Value;
 }
}

当我尝试使用foreach替代方法时,pID中的结果与1相同,其中应该是数据库中的product ID

我确信我做错了什么,但我无法弄清楚是什么。 感谢你的时间。

2 个答案:

答案 0 :(得分:0)

在按钮中单击Something方法,不需要使用for循环,因为它始终返回最后一个迭代值。因此,请在OnClick事件中使用以下代码获取点击值:

//Get value from each button pressed in the RepeaterItem
var repeaterItem = ((Control)sender).NamingContainer;
string pID = (repeaterItem.FindControl("prodID") as HiddenField).Value;

答案 1 :(得分:0)

我知道这已经过时了,但万一有人在寻找答案。

您可以使用CommandArgument作为以下内容:

<asp:Button runat="server" ID="addToCart" Text="Add to cart" OnClick="Something" CommandArgument='<%#Eval("ProductID")%>' />

然后,您可以在&#34; Something&#34;:

中执行此操作
string ProductID = (sender as Button).CommandArgument;