2015-10-07 73 views
0

我創建了一個表並且動態地添加了一些控件,但是當我用螢火蟲檢查它們時,它們似乎分配給這些控件的ID似乎不是相同的,它們似乎得到一個前綴所以試圖做FindControls("controlname")發佈頁面時,我沒有太多的喜悅。控件id的示例:ctl00_ContentPlaceHolder1_Monday_Normal_Small,但隨後將該前綴添加到控件名稱中也沒有多少喜悅。 任何建議將不勝感激,在此先感謝。從動態創建的下拉列表中檢索值

protected void Page_Load(object sender, EventArgs e) 
{ 
    CreateMenu(); 
} 

public void CreateMenu() 
{ 
    Table table = new Table(); 
    table.Attributes.Add("class", "table table-bordered"); 
    Label lbl = new Label(); 
    TableRow tr = new TableRow(); 
    TableCell tc = new TableCell(); 

    TableHeaderCell thc = new TableHeaderCell(); 
    lbl.Text = "Day"; 
    thc.Controls.Add(lbl); 
    tr.Cells.Add(thc); 

    thc = new TableHeaderCell(); 
    lbl = new Label(); 
    lbl.Text = "Meal"; 
    thc.Controls.Add(lbl); 
    tr.Cells.Add(thc); 

    thc = new TableHeaderCell(); 
    lbl = new Label(); 
    lbl.Text = "Normal"; 
    thc.Controls.Add(lbl); 
    tr.Cells.Add(thc); 

    thc = new TableHeaderCell(); 
    lbl = new Label(); 
    lbl.Text = "No Carb"; 
    thc.Controls.Add(lbl); 
    tr.Cells.Add(thc); 

    table.Rows.Add(tr); 


    for(int i=0;i<5;i++) 
    { 
     tr = new TableRow(); 
     tc = new TableCell(); 
     lbl = new Label(); 
     lbl.Text = "<h1 style='text-align:right;'>" + GetDay(i) + "</h1>"; 
     tc.Controls.Add(lbl); 
     tr.Cells.Add(tc); 

     tc = new TableCell(); 
     lbl = new Label(); 
     lbl.Text = GetMeal(i); 
     tc.Controls.Add(lbl); 
     tr.Cells.Add(tc); 

     for (int j = 0; j <= 1; j++) 
     { 
      tc = new TableCell(); 
      Table dropdowntable = new Table(); 
      TableRow tr2 = new TableRow(); 
      TableCell tc2 = new TableCell(); 
      for (int k = 0; k <= 2; k++) 
      { 
       DropDownList ddl = new DropDownList(); 
       ddl.ID = GetDay(i) + "_" + GetType(j) + "_" + GetSize(k); 
       ddl.DataSource = numbers; 
       ddl.DataBind(); 
       tc2.Controls.Add(ddl); 
      } 
      tr2.Cells.Add(tc2); 
      dropdowntable.Rows.Add(tr2); 
      tc.Controls.Add(dropdowntable); 
      tr.Cells.Add(tc); 
     } 
     table.Rows.Add(tr); 
    } 
    tableplaceholder.Controls.Add(table); 
} 

香港專業教育學院改變了DDL控制的的ClientIDMode並沒有前綴,但這似乎沒有解決我的問題,所以我有一個在我的頁面底部的提交按鈕並調用其點擊方法嘗試這種

DropDownList ddl = (DropDownList)FindControl(controlName); 
    try 
    { 
     int num = Convert.ToInt32(ddl.SelectedValue); 
    } 
    catch(Exception ex) 
    { 
     return 0; 
    } 
    return 0; 

但沒有運氣有任何想法?

+0

使用'ClientIDMode =「Static」'這將避免'前綴' – Webruster

回答

0

我意識到我遇到的問題是當試圖FindControl()我傳遞控件的ID而不是控件的名稱,這解決了我的問題。

0

要在Firebug中檢查時使用相同的Id,您應該使用下面的其中一個。

  1. 下拉集Clientmode爲靜態(使得其將在客戶端相同的ID

    ddl.ClientIDMode = ClientIDMode.Static;

2.使用ClientId屬性在javascript來獲得控件的確切ID。

​​
+0

即時通訊使用.NET 2.0和似乎沒有看到ddl.ClientIDMode,只有ddl.ClientID – mjmendes

0

嘗試設置ClientIDMode = Static,爲控制你正在添加的解釋在MSDN

希望這有助於!