台灣最大程式設計社群網站
線上人數
916
 
會員總數:242643
討論主題:187615
歡迎您免費加入會員
討論區列表 >> ASP.NET >> 動態產生控制項接值問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
動態產生控制項接值問題
價值 : 50 QP  點閱數:285 回應數:7

樓主

小強
門外漢
0 19
318 20
發送站內信




想請問各位前輩

我目前正在寫一個動態產生Textbox,這個Textbox可以讓使用者填入資料~~~並且在post後,程式要取得使用者輸入的資料~~

一開始我遇到的問題是這樣~~


我在page load寫下,動態產生三個Textbox讓使用者填入運費~~

for (int i = 0; i < 3; i++)
{

TextBox tmp = new TextBox();



tmp.ID = "shippingcost" + i;




Panel1.Controls.Add(tmp);

}






簡單先用下列方式測試取值(寫在page load裡)

if (IsPostBack) {




TextBox tt = (TextBox)Panel1.FindControl("shippingcost0");
TextBox tt1 = (TextBox)Panel1.FindControl("shippingcost1");
TextBox tt2 = (TextBox)Panel1.FindControl("shippingcost2");
Response.Write(tt.Text + "/" + tt1.Text+ "/" + tt2.Text);


}


我發現用Panel1.FindControl寫在一般方法中(不論是否是page load)會取不到值~~



我試著寫在button click方法中~~~點按button後可以取得使用者輸入的值

protected void Button1_Click(object sender, EventArgs e)
{
//TextBox tt = (TextBox)Panel1.FindControl("shippingcost0");
//TextBox tt1 = (TextBox)Panel1.FindControl("shippingcost1");
//TextBox tt2 = (TextBox)Panel1.FindControl("shippingcost2");
//Response.Write(tt.Text+"/"+tt1.Text);
}





我想請教一下這是為什麼?


因為實際上我的程式裡沒有用ASP Button控制項,所以取值得Code一定不會寫在Button1_Click(object sender, EventArgs e)
目前我用Request而不用Panel1.FindControl可以正常接值~~~

if (IsPostBack) {




string value = Request["shippingcost0"].ToString() ;
Response.Write(value);




}

但我還是想知道為什麼Panel1.FindControl一定要寫在Button1_Click(object sender, EventArgs e)裡才能接。

感恩啊!!!!

搜尋相關Tags的文章: [ 動態控制項取值 ] ,
本篇文章發表於2018-03-02 12:50
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
不錯的參考

topcat
捐贈 VP 給 topcat 檢舉此回應
這問題,牽涉到物件何時產生,何時有作用
您在PageLoad去產生
想在PageLoad去使用,但此事件中,物件可能還沒真正的將資料放上(可能才剛初始化完成)

在Button的Click事件,物件應該是完成初始化並綁上他的狀態

建議您試著:
物件動態產生的部分,寫在Page_Init事件,然後在Page_Load事件去取內容
這樣試試看

---
最後,或許不見得要動態產生物件,
如果方便,聊一聊為何想動態產生物件,他的應用情境是什麼?
小喵或許可以幫您想到,不必動態產生物件的方式

^.^a
本篇文章回覆於2018-03-02 17:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

小強
檢舉此回應
感謝喵大~~您真貼心

我現在是做一個產品運費管理

在編輯或新增產品時~~~會帶出目前資料庫中已經現有的運送方式

比如資料庫中有兩個運送方式~~
1.宅配
2.7-11


那麼在新增編輯產品時~~~程式自動撈這兩個運送方式出來~想用哪個就勾哪個~~但這兩個方式的運費我想讓使用者自己輸入~~

所以畫面會像下面

1.(checkbox)宅配 動態Textbox
2.(checkbox)7-11 動態Textbox

我曾想過先放固定兩個隱藏的Textbox~~然後看使用者勾哪個運送方式然後Textbox顯示屬性就True,~~可是這樣不行~~~因為當使用者在後台增加運送方式時~~就會需要3個textbox~~
所以......
本篇文章回覆於2018-03-02 22:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

小魚
檢舉此回應
我正在思考一個問題,
如果你用了主版頁面,
應該是永遠抓不到 shippingcost0 的
本篇文章回覆於2018-03-03 19:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

小強
檢舉此回應
HI小魚~~
我沒有用到主板頁面餒
本篇文章回覆於2018-03-04 01:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

小魚
檢舉此回應
恩恩,
我剛剛才看到你說在Button事件可以找到,
那就不是主版頁面的問題,
你可以試試小喵大大的方法,
我印象中動態的控制項最好都在Page_Init裡面產生會比較好。
本篇文章回覆於2018-03-04 07:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
最有價值解答

topcat
捐贈 VP 給 topcat 檢舉此回應
在編輯或新增產品時~~~會帶出目前資料庫中已經現有的運送方式

程式自動撈這兩個運送方式出來~想用哪個就勾哪個~~
但這兩個方式的運費我想讓使用者自己輸入~~
所以畫面會像下面

1.(checkbox)宅配 動態Textbox
2.(checkbox)7-11 動態Textbox


小喵做的話,就會在運費這部分
用個ListView(或者GridView)
在ItemTemplete中
就可以拉一個CheckBox,一個Label(顯示不同運送),再加上一個TextBox
這樣資料庫中兩個運送方式,就有兩組,未來增加三個運送方式,就有三組
而要確認Checkbox就可已從ListView的Items去找CheckBox,判斷那個Checked
再從那個Checked的CheckBox,找NamingContainer,去Find TextBox

這樣,不必用到動態組控制項,又可以找到對應的TextBox

您先試試看是否理解,動手做做看
^_^
本篇文章回覆於2018-03-04 14:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

小強
檢舉此回應
嗨~~喵大~~感謝~~終於理解~~也謝謝你的方法~~適用~~感恩
本篇文章回覆於2018-03-14 10:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.