从动态创建的下拉列表

时间:2015-10-07 04:40:07

标签: c# asp.net webforms

我正在创建一个表,并动态添加了一些控件但是当我用firebug检查它们时,分配给这些控件的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并且没有前缀但是这似乎没有解决我的问题,所以我在页面底部有一个提交按钮并调用它的click方法尝试这个

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

但是没有任何想法吗?

3 个答案:

答案 0 :(得分:0)

要在Firebug中检查时使用相同的ID,您应该使用下面的一个。

  1. 将下拉列表的Clientmode设置为Static(以便它在客户端具有相同的ID。

    ddl.ClientIDMode = ClientIDMode.Static;

  2. 2.在javascript中使用ClientId属性以获取控件的确切ID。

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

答案 1 :(得分:0)

尝试按照MSDN

中的说明为您要添加的控件设置ClientIDMode = Static

希望这有帮助!

答案 2 :(得分:0)

我意识到我遇到的问题是在尝试FindControl()时我传递的是控件的ID,而不是控件名称,这解决了我的问题。