簡體   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