ListBox SelectedIndexChanged事件是否需要在ASP.NET中进行回发?

时间:2010-10-25 21:55:24

标签: javascript asp.net postback selectedindexchanged

我正在尝试添加一个JavaScript函数,以便将ListBox中的所有选定项目显示为页面上Label中的连续字符串。这是必需的,因为AutoPostBack =“true”将导致ListBox一直滚动回第一个选定的项目。

所以这段代码可行:

 <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”时,我的代表似乎永远不会到达。

2 个答案:

答案 0 :(得分:0)

如果不是您想要的行为,我认为AutoPostBack不是您的最佳选择。当ASP.Net发回一个完整的帖子时,它与“传统的”HTML表单帖子相同,将表单的全部内容发送回服务器并等待响应(由于如何响应,这恰好是同一页面Asp.Net响应)。因此,为什么列表框中的位置会丢失 - 这是一个你要回来的全新列表框。

您是否将ASP.Net Ajax(UpdatePanels)视为一种可能的选择?这与回发的行为相同,因为它会将数据发送回服务器并调用您的方法,但只会回发部分页面。

答案 1 :(得分:0)

如果你想调用服务器端deligate,那么你必须做一个PostBack。

需要运行的服务器上的代码是什么?您应该能够使用JavaScript完成所有工作,然后在选择所有列表项后,使用不同的触发器(而不是selectedIndexChange)来运行服务器端代码。

您是否也看过Ajax UpdatePanel和maintainScrollPositionOnPostBack =“true”,以便页面在回发后保留其滚动位置。但是这只会影响页面滚动条而不影响选择框。