2013-06-19 147 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