2017-09-24 86 views
1

後我環顧四周,並試圖一對夫婦的解決辦法,我決定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

是的,我得到了不同的價值觀。我的問題的答案是波紋管。謝謝。 –

回答

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;