当我使用javascript更改在代码隐藏中创建的控件时,就会发生错误

The error occurs when I use javascript to change a control what is created in code behind?

本文关键字:控件 错误 创建 javascript 隐藏 代码      更新时间:2023-09-26

我是ASP.NET的新手,在工作中遇到问题,请帮忙。

我想在ASP页面的下拉列表中动态添加选项。所以我写了一个javascript函数:

<body>
    <form id="form1" runat="server" style="height:100%">
    </form>
    <script type="text/javascript">
        function addOptionToSelect(optKey, optValue) {
            var select = document.getElementById('<%=mySelect.ClientID%>');
                var opt = new Option(thisLabel, thisValue);
                select.add(opt);
            }
        }
    </script>
</body>

由于某些原因,我不得不在ASP:的代码后面添加dropdownlist web控件

    protected void Page_Load(object sender, EventArgs e)
    {
        Table t = new Table();
        form1.Controls.Add(t);
        TableRow r = new TableRow();
        formatTable.Rows.Add(r);
        TableCell c = new TableCell();
        formatRow.Cells.Add(c);
        DropDownList select = new DropDownList();
        select.ID = "mySelect";
        select.Text = "mySelect:";
        c.Controls.Add(select);
    }

我会得到错误:

编译器错误消息:CS0103:名称"mySelect"在当前上下文中不存在。

但是,如果我直接在ASP页面中添加下拉列表,则不会出现错误。

<form id="form1" runat="server" style="height:100%">
   <div>
        <asp:DropDownList ID="a_content_type" runat="server">
        </asp:DropDownList>
    </div>
</form>

我应该如何解决错误?"在asp页面中添加asp web控件"answers"在代码背后添加asp web控制"有什么区别?

我想我找到了另一种方法来解决这个问题。首先,我在ASP头中添加了一个新功能:

function setClientID(id) { this.clientID = id; } 

然后,在创建下拉列表后,将以下代码添加到代码后面:

Page.ClientScript.RegisterStartupScript(this.GetType(), "setClientID", "setClientID('" + mySelect.ClientID + "');", true);

最后,使用"this.ClientID"替换"<%=mySelect.ClientID%>"。它有效。