[英]Get the correct Value from HiddenField in ASP.NET Repeater
在环顾四周并尝试了几种解决方案后,我决定发布。请记住我正在学习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
。
我确定我做错了什么,但我不知道是什么。 谢谢你的时间。
在按钮单击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;
我知道这很古老,但是万一有人在寻找答案。
您可以使用CommandArgument
如下:
<asp:Button runat="server" ID="addToCart" Text="Add to cart" OnClick="Something" CommandArgument='<%#Eval("ProductID")%>' />
然后,您可以在“某事”中执行此操作:
string ProductID = (sender as Button).CommandArgument;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.