2011-08-30 60 views
1

我在主(靜態)下拉列表的選擇已更改的事件上動態地創建了幾個下拉列表。這些創建在默認TableTableCell中。當點擊提交按鈕時,我需要加載一個新的頁面,並將選定的下拉列表值作爲參數。基本上我需要在第二頁中獲得下拉結果。從動態創建的控件中檢索數據

這是如何創建投寄箱:

while (reader.Read()) 
    { 
     pcID = int.Parse(reader["fk_pcID"].ToString()); 
     pcDesc = GetpcDescription(pcID); 
     List<Product> prodList = GetProductsBypcID(pcID); 
     DropDownList ddList = new DropDownList(); 
     ddList.ID = "ddlPC" + pcID; 
     foreach(Product prod in prodList) 
     { 
      ddList.Items.Add(new ListItem(prod.ProductName, prod.ProductID.ToString())); 
     } 
     TableCell cell1 = new TableCell(); 
     cell1.Text = pcDesc; 

     TableCell cell2 = new TableCell(); 
     cell2.Controls.Add(ddList); 

     TableRow row = new TableRow(); 
     row.Cells.Add(cell1); 
     row.Cells.Add(cell2); 

     table.Rows.Add(row); 
    } 

編輯:上述代碼運行在被設定爲RUNAT服務器下拉的選擇更改事件。但是動態創建的下拉列表未設置爲在服務器上運行

+2

請不要在「ASP.NET:」前加問題。在[so]上,我們使用標籤對問題進行分類。 –

+2

請問一些代碼? –

+0

如果您在回發中檢索值時遇到問題,則可能是您在頁面生命週期中創建的動態控件太晚。嘗試添加它們,當您的webform初始化(OnInit) –

回答

1

這些下拉框是runat="server"?含義:你是通過後面的代碼通過.net後期事件以編程方式創建它們的嗎?如果是這樣,只需將選定的值與任何其他控件的值相同,然後將其傳遞給查詢字符串或cookie即可。

這些標準的html下拉列表?祝好運,從代碼隱藏中讀取它們。這讓你們都陷入了混亂狀態,儘管技術上可行,但實際上並不可行。

如果第二個選項是這種情況,那麼讓您的按鈕定位一個獲取選定值的JavaScript函數,然後通過querystring傳遞它們可能會更好。然後在另一頁上,您可以從代碼隱藏或客戶端讀取querystrings。

+0

不,將選定的值放入cookie是一個可怕的想法。這可以通過正確理解頁面生命週期來處理。 –

+0

上述代碼在設置爲runat服務器的下拉列表中選擇已更改的事件上運行。但動態創建的下拉列表不會設置爲在服務器上運行。 – devnull

+0

爲什麼這是一個可怕的想法?例如:「選擇您的語言[英語,西班牙語,德語]」Cookie不是這類信息的最佳地點嗎?他沒有給出關於下拉內容的任何線索(直到編輯)。因此,Cookie與存儲跨頁面數據的方式一樣有效。 –

0

這聽起來很適合DynamicControlsPlaceholder。它將自動保留您的動態控件,而不需要在頁面上添加任何代碼。如果您需要創建控件OnSelectedIndexChanged,我認爲這可能是最簡單的解決方案。

這是一個免費的組件,你可以在這裏下載它。

http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx

相關問題