我在大學項目,我需要建立一個購物網站的工作。
什麼是我的問題重要的是「產品」。 「產品」是僅使用ItemTemplate
控件的ASP.Net轉發器。然後中繼器在用戶的購物車中填充產品列表。
我的問題是什麼?
我遇到的特定區域是「保存」按鈕。 用戶可以更改他們想要的每種產品的數量;但是,他們必須單擊「保存」按鈕才能將信息發送到數據庫。
問題是我的保存按鈕的onclick事件中訪問正確的數量文本框。
如何在我的所有保存按鈕的OnClick事件中訪問正確的文本框?
我試過了什麼?
我最初是想用WebControl.FindControl方法。 當然,FindControl需要一個ID,我需要爲每個文本框使用不同的ID。
爲了這個ID的問題,我試圖修復...
首先...
試圖結合產品ID的文本框的ID。
<asp:TextBox ID='quantity<%#Eval("productId") %>' runat="server" TextMode="Number" min="1" Text='<%#Eval("selectedQuantity") %>' max='<%#Eval("availableQuantity") %>' />
然後我發現那是不可能的;因爲在以這種方式設置ID時,必須使用「簡單ID」(例如:「button1」)。據說我可以在代碼隱藏中設置ID。
其次...
然後我使用Repeater的OnItemCreated事件動態設置文本框 「QUANTITYX」,其中X是產品ID的ID嘗試。
我所做的是在產品ID綁定到一個WebControl的屬性:
<asp:TextBox ID='quantity' productId='<%#Eval("productId") %>' runat="server" TextMode="Number" min="1" Text='<%#Eval("selectedQuantity") %>' max='<%#Eval("availableQuantity") %>' />
在此之後,我然後使用FindControl()
方法來獲取與「量」的ID TextBoxs。找到文本框後,我將採用productId屬性並將其值附加到TextBox ID。
protected void productsList_ItemCreated(object sender, RepeaterItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item)
{
TextBox quantity = (TextBox)e.Item.FindControl("quantity");
quantity.ID = String.Format("quantity{0}", quantity.Attributes["productId"]);
}
}
然後我發現productId屬性沒有值;因爲DataBinding沒有發生。換句話說,Eval("productId")
未運行。
三...
我採取了同樣的方式作爲一個前用1個差異。我使用直放站的OnItemDataBound
事件而不是OnItemCreated
事件。
protected void productsList_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item)
{
TextBox quantity = (TextBox)e.Item.FindControl("quantity");
quantity.ID = String.Format("quantity{0}", quantity.Attributes["productId"]);
}
}
這部分工作;但是,有一個問題。具有最大產品ID的產品被跳過。 (E.X,如果我有產品4,32和68.產品ID 68將被跳過)
正如您在下圖中看到的,我們有3種產品。我編輯了一些文字圖片來清楚地指出文本框(當它們被渲染時)。
存在的ID是1,32和34.如果您查看1和32的ID屬性,您會看到它們具有「數量」,並附有其產品ID。
現在看看34的ID屬性.ID屬性只是「數量」。
現在我有點卡住了。
我是什麼用?
- 的Visual Studio 2017年
- 的.NET Framework 4.6.1
- 2層的WebForms項目
- 谷歌瀏覽器
使用ASP的控制,而不是簡單的HTML。 – AsifAli72090
@Asif.Ali我正在使用ASP Controls ... OP中的最後一張圖片是chrome開發人員工具中呈現頁面的屏幕截圖。 – Tyler
你的問題是保存按鈕點擊事件訪問文本框? – AsifAli72090