通过javascript添加到<select>的选项在回发中丢失</select>

时间:2009-08-13 10:25:36

标签: asp.net javascript

我在客户端通过javascript向select元素添加了一些选项,但无法在回发中获取它。

我该怎么办?

用于添加选项的代码:

<asp:DropDownList ID="ddlProduct" runat="server"></asp:DropDownList>

var ddlProduct = "#"+"<%= ddlProduct.ClientID %>";

$(ddlProduct).append($("<option></option>").html(product_name)

2 个答案:

答案 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}}控制。