如何永远不要在帖子后面刷新UpdatePanel?

时间:2013-06-10 08:52:10

标签: asp.net

我想将ListBox嵌入UpdatePanelListBox需要启用多选,并在项目选择时触发回发。我的问题是回发上的滚动条。每次点击一个项目时它都会回到顶部。我已经尝试了不同的方法来备份滚动位置,它总是有问题(至少在IE8中,我必须关注的浏览器)。要么我得到一个闪烁,要么一旦用户在回发后使用他的鼠标滚轮,滚动条将跳回到顶部。这在Chrome和Mozilla中不会发生。

我在想,也许有些东西应该可行 - 在没有重新绘制我的ListBox / udpating包含UpdatePanel的情况下回发?这可能吗?

3 个答案:

答案 0 :(得分:1)

任何完整的回发都必须重新绘制列表视图,因此保持列表视图的滚动位置会有问题

智能导航

如果它是您正在努力的页面滚动位置,那么您可以尝试智能导航

http://msdn.microsoft.com/en-us/library/system.web.ui.page.maintainscrollpositiononpostback.aspx

我认为浏览器覆盖率对此非常可靠(例如,见http://forums.asp.net/p/1094179/1651390.aspx

更新面板和回发控件

如果您只是更新更新面板中的内容,那么它不应该丢失它的页面位置。确保你正在做部分回发而不是完整。列表框和触发回发的控件都应该在更新面板中。

虽然有一些警告 - 如果你在更新面板外有一个按钮,它可以触发部分回发,如果它在面板的触发器集合中(http://msdn.microsoft.com/en-us/library/system.web.ui.updatepanel.triggers.aspx

JQuery AJAX

核选项将是使用JQuery AJAX或类似的例如适当的AJAX不是更新小组使用的奇怪的假中途内容(并不是说它们不是非常有用 - 只需要明智地使用)。 JQuery AJAX是一个在回发体系结构中工作的猪,所以我不一定会推荐。

维护ListBox滚动位置

注意 - 如果是列表框滚动位置,您关注他们这个问题

Maintain scroll position in listboxes in updatepanels, NOT the page

给出了一些好的建议 希望有所帮助

答案 1 :(得分:0)

我认为闪烁可能总是发生在你做的任何事情上(闪烁实际上是在几个阶段呈现内容的浏览器)。

您应首先尝试使用MaintainScrollPositionOnPostBack页面的属性。

http://msdn.microsoft.com/en-us/library/system.web.ui.page.maintainscrollpositiononpostback.aspx

答案 2 :(得分:0)

为什么需要回复每个项目选择?你不是指异步回发吗? 我在用户控件中有一个与ListBox类似的问题,而后者又在UpdatePanel中。我使用jQuery来处理选择和取消选择列表框中所有项目的两个按钮上的点击事件。

试试这个:

创建.js文件(例如select.js)并在其中插入jQuery代码。类似的东西:

function pageLoad() {

    //insert code here
}

使用pageLoad()代替(document).ready。

很重要

然后,在ScriptManager中插入脚本引用:

<asp:ScriptManager ID="sm" runat="server" EnablePartialRendering="True">
    <Scripts>
        <asp:ScriptReference Path="~/Scripts/Select.js" />
    </Scripts>
</asp:ScriptManager>