我想将ListBox
嵌入UpdatePanel
。 ListBox
需要启用多选,并在项目选择时触发回发。我的问题是回发上的滚动条。每次点击一个项目时它都会回到顶部。我已经尝试了不同的方法来备份滚动位置,它总是有问题(至少在IE8中,我必须关注的浏览器)。要么我得到一个闪烁,要么一旦用户在回发后使用他的鼠标滚轮,滚动条将跳回到顶部。这在Chrome和Mozilla中不会发生。
我在想,也许有些东西应该可行 - 在没有重新绘制我的ListBox
/ udpating包含UpdatePanel的情况下回发?这可能吗?
答案 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>