【问题标题】:Does the ListBox SelectedIndexChanged event require postback in ASP.NET?ListBox SelectedIndexChanged 事件是否需要在 ASP.NET 中回发?
【发布时间】:2010-10-25 21:55:23
【问题描述】:

我正在尝试添加一个 JavaScript 函数,以将 ListBox 中的所有选定项目显示为页面上标签中的连接字符串。这是必需的,因为 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" 时,我的委托似乎永远无法联系到。

【问题讨论】:

    标签: javascript asp.net postback selectedindexchanged


    【解决方案1】:

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

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

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

    【讨论】:

    • 我正在使用更新面板。我没有找到 maintainScrollPositionOnPostBack 属性。
    • 有很多 UI 逻辑会在后面代码中的 OnSelectedIndexChanged 事件上触发。如果我是 JavaScript 大师,我不会害怕将所有内容都转移到客户端。
    • Zoinks!我可能应该知道使用服务器端委托需要服务器:D.
    • maintainScrollPositionOnPostBack 和 UpdatePanel 是 2 个单独的项目。很抱歉造成混乱
    【解决方案2】:

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

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

    【讨论】:

    • 我真正的问题是,在列表框中进一步向下多选时,ListBox 返回到滚动列表的顶部。在阅读其他帖子后,我发现这显然是因为 UpdatePanel。我现在正试图通过客户端脚本和 AutoPostBack="false" 来解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2018-09-15
    • 2017-09-24
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    相关资源
    最近更新 更多