2013-06-19 98 views
1

在我的应用程序中,我创建了一个ajax autocompelete扩展文本框。一旦用户选择值,我想将该值插入到我的下拉列表中。 用于这一目的的代码是:通过javascript更改dropdownlist的值后,asp.net中dropdownlist的值消失

function GetCode(source, eventArgs) { 
     var hfield = $get('<%=this.HiddenID.ClientID%>'); 
     hfield.value = eventArgs.get_value(); 

     //hfield has the value selected in the autocomplete text box 

     var abc = document.getElementById('<% =DropDownList2.ClientID %>'); 

     for (var i = 0; i < abc.length ; i++) { 
      alert(abc.options[i].value); 
      if (abc.options[i].value == hfield.value) { 
       abc.options[i].selected = true; 
       break; 
      } 
     } 
    } 

这里的问题是:我的价值没有在下拉列表显示。 当我尝试调试代码时,我意识到值确实出现在下拉列表中,但当此代码退出时,该值将从下拉列表中消失。

我不知道为什么值正在消失!请帮忙!谢谢!

回答

3

由于您最初绑定了服务器端的数据,并且当您将ajax请求插入到下拉列表中,因此DropDownList的ViewState不知道这个新值,因此呈现了什么它有过。

+0

好吧,现在我明白了!但是,我应该怎么做才能使我的价值观不会消失? – Ankita

+0

做法是这样的:@ speti43建议:添加一个Hidden元素,并将其值设置为下拉列表中的所选值。回发之后,将这个值自己恢复到下拉列表中。您基本上必须手动管理状态,不幸的是: -/ – Icarus

0

如果您想通过javascript在客户端修改服务器端dropdownlist的元素集合,那么您可以在下次回发时获得eventvalidation错误。如果这种行为不是因为您可以通过xss攻击修改这些控件集合,并将额外的附加值提交给服务器,那将是危险的。

+0

我没有为我的下拉列表添加任何额外的值。我只是试图通过javascript更改下拉列表中的选择内容。有没有其他方法可以做到这一点? – Ankita

+0

是的,在服务器端做。你在服务器端有价值,所以你可以在那里做选择。或在每个page_load上检查您的隐藏字段的值,并在其中设置下拉列表的选定值。但是这会像你想通过手动来管理“viewstate”。 – speti43