2010-10-25 147 views
0

我試圖添加一個JavaScript函數來顯示列表框中的所有選定項目作爲頁面上的標籤中的concatenated字符串。這是必要的,因爲AutoPostBack =「true」將導致列表框一直滾動回第一個選定的項目。ListBox SelectedIndexChanged事件是否需要在ASP.NET中回傳?

所以此代碼的工作:

<script type="text/javascript"> 
    function Updatelist() { 
     var sel = document.getElementById('<%=lstbxStuff.ClientID%>'); 
     var lbl = document.getElementById('ctl00_cph_lblSelectedStuff'); 
     var listLength = sel.options.length; 
     var textForListbox = ""; 
     var list2length = 0; 
     for (var i = 0; i < listLength; i++) { 
      if (sel.options[i].selected) { 
       if(list2length == 0) { 
        textForListbox = sel.options[i].text; 
       } else { 
        textForListbox = textForListbox + ", " + sel.options[i].text; 
       } 
       list2length++; 
      } 
     } 
     lbl.innerText=textForListbox; 

     return textForListbox; 
    } 
</script> 

不幸的是我還需要後面的SelectedIndexChanged委託的代碼。有沒有辦法使用這兩個這些沒有做PostBack?當我設置AutoPostBack =「false」時,我的委託似乎從未達到過。

回答

0

如果你想調用服務器端解析,那麼你必須做一個回發。

需要運行的服務器上的代碼是什麼?您應該能夠完成JavaScript中的所有工作,然後在選擇所有列表項後,使用不同的觸發器(不是selectedIndexChange)來運行服務器端代碼。

您是否也看到過,Ajax UpdatePanel和maintainScrollPositionOnPostBack =「true」,以便頁面在回發後保留滾動位置。但是這隻會影響頁面滾動條而不是選擇框。

+0

我正在使用UpdatePanel。我沒有找到maintainScrollPositionOnPostBack屬性。 – Blanthor 2010-10-25 22:09:29

+0

有很多UI邏輯會在代碼後面的OnSeletectedIndexChanged事件中被觸發。如果我是一名JavaScript大師,我不會將所有事情都搬到客戶手中。 – Blanthor 2010-10-25 22:16:45

+0

Zoinks!我可能應該知道服務器需要使用服務器端代表:D。 – Blanthor 2010-10-26 13:33:03

0

我不認爲AutoPostBack是適合您的方式,如果這不是您想要的行爲。當ASP.Net完成一個完整的回傳時,它與「傳統的」HTML表單文章相同,將表單的全部內容發送回服務器並等待響應(由於Asp.Net響應)。因此,爲什麼在列表框中的位置丟失了 - 這是一個全新的列表框,你可以找回。

你看過ASP.Net Ajax(UpdatePanels)作爲一個可能的選擇嗎?這將與回發相同,因爲它會將數據發送回服務器並調用您的方法,但只回發部分頁面。

+0

我真正的問題是,在進一步向下選擇列表框的情況下,ListBox會返回到滾動列表的頂部。在閱讀其他文章後,我發現這顯然是因爲UpdatePanel。我現在試圖通過客戶端腳本和AutoPostBack =「false」來解決這個問題。 – Blanthor 2010-10-25 22:16:27

相關問題