如何动态添加和删除ASP:DropDownLists?

时间:2014-04-04 19:15:35

标签: c# asp.net

我希望能够有一个可点击的按钮,动态添加下拉列表,从数据库中提取它们的值。我的问题是看起来ASP.Net试图在Javascript之前解析下拉列表并且抱怨ID。

这是我得到的错误:

DotNetNuke.Services.Exceptions.ModuleLoadException: 'ddlToolPusher' + i + '' is not a valid identifier. ---> System.Web.HttpParseException: 'ddlToolPusher' + i + '' is not a valid identifier. --->

这就是我所拥有的:

ASCX

<div id="dropdowns">
    Toolpushers:
    <asp:DropDownList runat="server" id="ddlToolPusher" />
    <asp:Button runat="server" ID="btnSubmit" Text="Submit" />
</div>
<p><a href="#" id="addDD">add something</a></p>
<script type="text/javascript">
    $(document).ready(function () {
    var ddlDiv = $('#dropdowns');
    var i = 1;
    $('#addDD').click(function() {
        $('<asp:DropDownList runat="server" id="ddlToolPusher' + i + '" />').appendTo(ddlDiv);
        i++;
        return;
    });    
});
</script>

ascx.cs

protected void Page_Load(object sender, EventArgs e)
{
    MyDatabase db = new MyDatabase();
    rmModuleNavigationWrapper.InnerHtml = Helper.BuildModuleNavigation();
    btnSubmit.Click += new EventHandler(ButtonHandler);

    if (!Page.IsPostBack)
    {
        BindData();
    }


}

protected void BindData()
{
    string connStr = ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString;
    using (SqlConnection conn = new SqlConnection(connStr))
    {
        SqlCommand cmd = new SqlCommand("robinson_GetEmployeesForRigDDL", conn);
        cmd.CommandType = CommandType.StoredProcedure;

        conn.Open();
        SqlDataReader reader = cmd.ExecuteReader();
        ddlToolPusher.DataSource = reader;
        ddlToolPusher.DataTextField = "Name";
        ddlToolPusher.DataValueField = "ID";
        ddlToolPusher.DataBind();
        ddlToolPusher.Items.Insert(0, new ListItem("Choose One", "0"));
        ddlToolPusher.SelectedIndex = 0;
    }
}

2 个答案:

答案 0 :(得分:1)

这段代码:

   $('#addDD').click(function() {
    $('<asp:DropDownList runat="server" id="ddlToolPusher' + i + '" />').appendTo(ddlDiv);
    i++;

此代码在 BROWSER 上进行评估,不会转换为HTML元素。您只能使用jQuery / javascript等构建DOM元素...您无法使用它添加/修改ASP标记。

你应该添加javascript或jQuery,通过AJAX调用等将项目添加到SELECT列表......你所拥有的东西永远不会工作。

答案 1 :(得分:1)

asp:DropDownLists转换为html select / option标记。如果您尝试添加列表项客户端,则必须使用客户端样式编码将<option>添加到<select>

这不会持久。一旦发回,动态添加的选项就会消失