我有一个在ASP.NET Panel中放置的gridview。 面板和Gridview都在UpdatePanel中。 gridview中有一列导致部分PostBacks。 我想在这些回发上保持Panel Scroll位置。 有什么办法吗? 问候。
答案 0 :(得分:40)
在asp.net
中没有内置工具可以解决它但是,这个问题有一个解决方法;你需要用javascript来处理它。
此处提到了解决方案:Maintain Scrollbar Position Inside UpdatePanel After Partial PostBack
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Release" />
<script type="text/javascript">
// It is important to place this JavaScript code after ScriptManager1
var xPos, yPos;
var prm = Sys.WebForms.PageRequestManager.getInstance();
function BeginRequestHandler(sender, args) {
if ($get('<%=Panel1.ClientID%>') != null) {
// Get X and Y positions of scrollbar before the partial postback
xPos = $get('<%=Panel1.ClientID%>').scrollLeft;
yPos = $get('<%=Panel1.ClientID%>').scrollTop;
}
}
function EndRequestHandler(sender, args) {
if ($get('<%=Panel1.ClientID%>') != null) {
// Set X and Y positions back to the scrollbar
// after partial postback
$get('<%=Panel1.ClientID%>').scrollLeft = xPos;
$get('<%=Panel1.ClientID%>').scrollTop = yPos;
}
}
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
</script>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Panel ID="Panel1" runat="server" Height="300">
<%-- Some stuff which would cause a partial postback goes here --%>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</form>
以下是代码快照: -
答案 1 :(得分:5)
将MaintainScrollPositionOnPostback =“true”添加到您的页面指令。
答案 2 :(得分:0)
几天来,我一直在寻找解决此问题的方法,使用了典型的MaintenanceScrollPositionOnPostback替代方法以及使用BeginRequestHandler和EndRequestHandler的JavaScript解决方案,而我使用的是MasterPage。
什么都没用,但是我想出了一个相当简单的解决方案,使用jQuery和BeginRequestHandler和EndRequestHandler并使用相同的@ waqas-raja算法:
<script type="text/javascript">
var scrollPosition = 0;
$(document).ready(function () {
$(window).scroll(function (event) {
scrollPosition = $(window).scrollTop();
});
});
</script>
<script type="text/javascript">
// It is important to place this JavaScript code after ScriptManager1
var xPos, yPos;
var prm = Sys.WebForms.PageRequestManager.getInstance();
function BeginRequestHandler(sender, args) {
console.log('BeginRequest');
}
function EndRequestHandler(sender, args) {
$(window).scrollTop(scrollPosition);
}
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
</script>
这个想法是,每当用户移动Scroll时,就将Scroll的位置捕获到全局变量中,这样就可以知道哪个是最后一个位置,并且在进行回发时,会输入EndRequestHandler事件并用它更新用户标记的最后位置
这在Firefox和Google Chrome中对我有用:)