我在客户端通过javascript向select元素添加了一些选项,但无法在回发中获取它。
我该怎么办?
用于添加选项的代码:
<asp:DropDownList ID="ddlProduct" runat="server"></asp:DropDownList>
var ddlProduct = "#"+"<%= ddlProduct.ClientID %>";
$(ddlProduct).append($("<option></option>").html(product_name)
答案 0 :(得分:17)
使用JavaScript添加到下拉列表的选项永远不会到达服务器端,更不用说在回发期间保留。选项存储在ViewState中。您正在使用客户端的DOM修改下拉列表,但是ViewState呢?您没有对其进行修改,因此当ASP.NET从ViewState重新加载下拉列表的状态时,ASP.NET不会知道对下拉列表进行了任何更改。
一种方法是使用隐藏变量来存储您添加到下拉列表中的值。当控件进入服务器端时,您可以检查此隐藏字段的值,并在必要时将这些项添加到下拉列表中。
您可以将项目存储在JSON格式的字符串中,并使用.NET Framework的DataContractJsonSerializer Class(如果您使用的是.NET Framework&gt; = 3.5)在服务器端解析此字符串。如果您不使用.NET Framework 3.5,那么您可以使用像text1,text2|value1,value2
答案 1 :(得分:3)
从select
标记发回服务器的唯一数据是所选项目的值。您添加的选项不会发送回服务器。
ASP.NET中的服务器控件使用viewstate来保留在呈现的ListItem
标记中形成option
标记的select
个对象。视图状态通常在一个单独的隐藏字段中发送,以便在发布表单时将其返回给服务器。
您可以对添加的选项使用类似的技术,也可以将它们放在隐藏字段中,然后您可以在服务器代码中处理该字段以创建ListItem
个对象,以便将项目放入{{ 1}}控制。