2011-06-27 83 views
1

這不會是我的問題的一個非常明確的解釋,但我不知道如何更好地解釋它。namingContainer ID with dynamic gridviewrow

我有一個我在PreInit上動態創建的gridview。這個gridview在每一行都有動態添加的文本框。

每當我按下按鈕,我循環內的gridview單元格,並獲取文本框的文本 - 並更新數據庫。

創建gridview的第一次,排UNIQUEID的是這樣的: ctl03,ctl04,ctl05,ctl06(因此,文本框的ID是ctl03 $ txt0等)

我第一次推按鈕,行的UniqueID仍然是相同的,這樣我就可以通過FindControl(ID)方法或使用Request.Form [txt.UniqueID]找到控件。在第一次之後,無論何時按下按鈕,都會創建如下所示的行ClientId:ctl02,ctl03,ctl04,ctl05 ..以便我找不到文本框,並且無法捕獲寫入它們的文本。

當我看呈現的HTML代碼,我看到rowClientID的是仍與最初創建者(ctl03,ctl04,ctl05,ctl06)

有沒有人有任何想法,爲什麼的rowid(命名相同容器ID)在第一次更新後改變?

在此先感謝。

回答

0

一個解決方案是使用靜態ID創建您的文本框,而不是讓它動態地由asp.net創建。這可以,如果你使用asp.net版本4.

其他解決方法就是使一個簡單的<input name="KnowName01" id="KnowId01" type="text" value="your value here" maxlength="100" etc... >

,然後在後您剛剛捕獲與舊的方式回報和獲得的價值來完成。

Request.Form["KnowName01"] 

最後,文本框比呈現輸入罷了,再加上一些檢查就可以寫什麼,包括防XSS安全。

+0

糾正我,如果我錯了,但它不是唯一ID,我們發送到Request.Form作爲關鍵?我將ID分配給文本框(比如說txt0),但是在呈現時,asp.net會放置前綴,這會使我的初始ID爲'ctl00 $ CntntPlcHld $ ctl02 $ txt0'。問題發生在這裏:我得到最初的rowID = ctl03但是在按下按鈕進行第二次或第三次更新後,rowID變爲ctl02。有趣的部分是,它仍然是HTML代碼上的ctl03。由於代碼隱藏和HTML呈現代碼上的兩個rowID不匹配,我得到一個錯誤的文本框UniqueID,並且無法捕獲文本。 – louip

+0

@louip yes uniqueid是表單上的唯一標識符,這是呈現標籤上的名稱。 – Aristos

相關問題