2010-10-25 159 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

相关问题