繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM