获取从HiddenField正确的价值

问题描述:

后我环顾四周,并试图一对夫妇的解决办法,我决定post.Bear记住,我正在学习ASP ATM(所以我的经验是少)获取从HiddenField正确的价值

所以问题如下:

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

在后面的代码我试图获取ID为字符串,但一切我想它只返回我一个ID是1

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在数据库中。

我相信我做错了什么,但我无法弄清楚什么。 Thx为您的时间。

+0

当你看网页的HTML源代码,你看到不同的值在每个转发器项目的隐藏字段? –

+0

此外,根据您的代码,完成for循环后,pID将保留LAST转发器项目中隐藏字段的值。中继器中的最后一项是否具有prodID隐藏字段值1? –

+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;