在updatepanel部分回发后维护页面滚动位置
我是ASP.NET的初学者,在部分回发UpdatePanel后,我在维护页面的滚动位置时遇到问题。 我尝试在设置
MaintainScrollPositionOnPostback="true"
,但它没有做到这一点。 请注意我正在使用(并且必须使用)FireFox。
任何帮助,将不胜感激。 谢谢! 这是我的代码:
这看起来像是你问题的答案。 作为一个加号; 它似乎适用于每个浏览器而不仅仅是FF。
如果您使用IE,那么它非常简单,只需将代码放入您的页面指令中即可。
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" MaintainScrollPositionOnPostback="true" %>
但它不适用于Firefox,因为您必须在网站中添加一个浏览器文件
右键单击解决方案资源管理器>添加新项
选择“浏览器文件”并将其添加到App_Browsers文件夹。
将MaintainScrollPositionOnPostbackfunction添加到此浏览器文件,如下所示。
有时这也行不通,
然后一个简单的解决方案只需在网格和onpostback之后添加一个空白的Update面板,只需将焦点放在该更新面板上即可在任何浏览器中使用。 在cs postbackevent updatepanel1.Focus();
如有任何问题,请随时提出或任何修改回复。
虽然我知道你不熟悉javascript,但我仍然建议给你这个答案,因为在.net中没有内置的解决方案,但是你可以用javascript来解决它。 不要担心Javascript不强硬,是Web开发的重要组成部分之一。 所以试一试吧。 可能会帮助你。
您可以参考此页面: 在updatepanel部分回发后维护页面滚动位置
您可以将焦点设置在您想要在屏幕上看到的控件上。
例如,如果dropdownlist“ddlCity”是导致回发的控件,则在下拉列表SelectedIndexChanged代码后执行以下操作:
ddlCity.Focus();
我能够通过以下hack解决类似的问题:
将HiddenField Control添加到您正在使用的页面或控件中。确保将ClientIDMode设置为静态,以便可以在JavaScript中轻松访问它。 我们将使用JavaScript来更新此控件:
还添加一个面板控件作为我们将插入一些javascript的目标:
添加以下JavaScript。 使用window.onscroll函数,我们正在更新我们的HiddenField控件。 updateScrollPosition函数将从我们的C#代码后面调用:
创建一个新的C#类并添加以下方法。 这将允许我们从C#中的代码隐藏中插入一些Javascript:
public static class ClientScript { public static void InsertScript(string script, Control target) { HtmlGenericControl s = new HtmlGenericControl(); s.TagName = "script"; s.InnerHtml = script; target.Controls.Add(s); } }
现在,在您的控件或页面的代码中,使用我们创建的静态类将javascript插入到pnlScriptRunner中,使用ASP.NET HiddenField Control中的值调用JavaScript函数“updateScrollPosition(value)”:
protected void btnRotate_Click(object sender, EventArgs e) { //Do stuff with controls in your update panel here, then: ClientScript.InsertScript("updateScrollPosition(" + scrollPosition.Value + ");", pnlScriptRunner); UpdatePanel1.Update(); }
我的btnRotate_Click事件在更新面板中注册为触发器:
Image Preview:
以下参考是必要的:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls;
希望这有帮助!