我希望能够有一个可点击的按钮,动态添加下拉列表,从数据库中提取它们的值。我的问题是看起来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;
}
}
答案 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>
这不会持久。一旦发回,动态添加的选项就会消失