使用弹出控件扩展器 Asp.net 在更新面板内维护滚动位置复选框列表?

Posted

技术标签:

【中文标题】使用弹出控件扩展器 Asp.net 在更新面板内维护滚动位置复选框列表?【英文标题】:Maintain scroll position checkbox list inside update panel with popup control extender Asp.net? 【发布时间】:2014-11-02 11:15:38 【问题描述】:

我正在尝试保持更新面板内复选框列表的滚动位置。

我已经使用文本框、面板和弹出扩展器构建了我自己的控件,当在文本框中标记复选框项目选择但其滚动位置不保持时,通过单击面板和面板内的复选框列表来扩展文本框?

我的代码:

<div>
    <asp:UpdatePanel ID="updatepanel1" runat="server" RenderMode="Inline">
        <ContentTemplate>
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:PopupControlExtender ID="TextBox1_PopupControlExtender" runat="server" DynamicServicePath=""
                Enabled="True" ExtenderControlID="" TargetControlID="TextBox1" PopupControlID="Panel1"
                OffsetY="22">
            </asp:PopupControlExtender>
            <asp:Panel ID="Panel1" runat="server" Height="116px" Width="145px" BorderStyle="Solid"
                BorderWidth="2px" Direction="LeftToRight" ScrollBars="Auto" BackColor="#CCCCCC"
                Style="display:none ">
                <asp:CheckBoxList ID="CheckBoxList1" runat="server" DataTextField="holiday_name"
                    DataValueField="holiday_name" AutoPostBack="True" OnSelectedIndexChanged="CheckBoxList1_SelectedIndexChanged" > 
                </asp:CheckBoxList>
            </asp:Panel>
        </ContentTemplate>
    </asp:UpdatePanel>
</div>

我用这个帖子试了一下,

Maintain Panel Scroll Position On Partial Postback ASP.NET

我使用了类似的脚本,

<script type="text/javascript">
    var xpos, ypos;
    var pra = Sys.WebForms.PageRequestManager.getInstance();

    function BeginRequestHandler(sender, args) 
        alert("hello");
        if ($get('<%=CheckBoxList1.ClientID%>') != null) 
            xpos = $get('<%=CheckBoxList1.ClientID%>').scrollLeft;
            ypos = $get('<%=CheckBoxList1.ClientID%>').scrollTop;
        
    

    function EndRequestHandler(sender, args) 
        if ($get('<%=CheckBoxList1.ClientID%>') != null) 
            xpos = $get('<%=CheckBoxList1.ClientID%>').scrollLeft = xpos;
            ypos = $get('<%=CheckBoxList1.ClientID%>').scrollTop = ypos;
        
    

    prm.add_beginRequest(BeginRequestHandler);
    prm.add_endRequest(EndRequestHandler);
</script>

...但是这个脚本不能正常工作,它没有警告“你好”,也许它没有调用方法??

希望得到建议,因为我一直在搜索并尝试解决此问题。

谢谢

【问题讨论】:

【参考方案1】:

脚本有错误。您将其定义为pra 并使用prm,将其更改为:

var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);

也可以使用window.scrollTo(positionX, positionY); 来定位,完整代码为:

<script type="text/javascript">
    var xpos, ypos;
    var prm = Sys.WebForms.PageRequestManager.getInstance();

    function BeginRequestHandler(sender, args) 
        alert("hello");
        if ($get('<%=CheckBoxList1.ClientID%>') != null) 
            xpos = $get('<%=CheckBoxList1.ClientID%>').offsetLeft;
            ypos = $get('<%=CheckBoxList1.ClientID%>').scrollTop;
        
    

    function EndRequestHandler(sender, args) 
        if ($get('<%=CheckBoxList1.ClientID%>') != null) 
            xpos = $get('<%=CheckBoxList1.ClientID%>').offsetLeft= xpos;
            ypos = $get('<%=CheckBoxList1.ClientID%>').scrollTop = ypos;

            window.scrollTo(xpos, ypos);
        
    

    prm.add_beginRequest(BeginRequestHandler);
    prm.add_endRequest(EndRequestHandler);
</script>

通常脚本可以完成这项工作。

打开浏览器的调试工具,看看有没有其他的javasript错误。

您也可以尝试从这个答案滚动的功能https://***.com/a/6356328/159270

【讨论】:

甚至没有提醒你好 你好没有提醒,我用你更新的答案,但它不工作 我在 IE 中运行它,所以如果 JS 中有任何错误,则必须显示错误,但没有提及 js 中的任何错误? 现在它正在打印你好但不保持位置:( @user3664724 使用这里的脚本***.com/questions/6355482/… 移动它...

以上是关于使用弹出控件扩展器 Asp.net 在更新面板内维护滚动位置复选框列表?的主要内容,如果未能解决你的问题,请参考以下文章

异步更新 ASP.NET 面板

ASP.NET 在嵌套在更新面板中的用户控件中注入 javascript

从放置在更新面板外部的控件触发 asp.net 事件

更新面板 AJAX asp.net 后运行脚本

Asp.net 按钮 onclick 在更新面板中不起作用

向导控件中的 Gridview 自定义分页在 asp.net 中无法正常工作