所以问题如下:
我有一个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
。
我确信我做错了什么,但我无法弄清楚是什么。 感谢你的时间。
答案 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;