2015-10-07 8 views
0

Я создаю таблицу и добавил несколько элементов управления к ней динамически, но идентификатор, присваивающий этим элементам управления, не кажется таким же, когда я проверяю их с помощью firebug, они, похоже, получают префикс поэтому стараюсь делать FindControls("controlname") при публикации страницы im, не имеющей большой радости. пример элемента управления 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); 
} 

Ive изменил ClientIDMode элементов управления DDL и без префикса, но это не кажется, чтобы решить мою проблему, так что я кнопку отправки в нижней части моей страницы и вызывая метод щелчка пытается это

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

Но неудивительно, что идеи?

+0

Использовать 'ClientIDMode =" Static "' this будет избегать 'prefix' – Webruster

ответ

0

Я понял, что проблема была у меня при попытке FindControl() я передавал идентификатор элемента управления, а не имя элемента управления, это решило мою проблему.

0

Чтобы иметь один и тот же идентификатор во время проверки в Firebug, вы должны использовать один из приведенных ниже.

  1. Набор Clientmode из выпадающего списка Статический (так, что он будет иметь тот же идентификатор в стороне клиента

    ddl.ClientIDMode = ClientIDMode.Static;.

2.Use ClientID недвижимость в Javascript, чтобы получить точный идентификатор элемента управления.

var ddlValue = document.getElementById("<% ddl.ClientID %>"); 
+0

Я использую .NET 2.0 и, похоже, не вижу ddl.ClientIDMode, только ddl.ClientID – mjmendes

0

ClientIDMode = Static установки для Попробовать Управляйте своим добавлением, как описано в MSDN

Надеюсь, это поможет!

Смежные вопросы