Ich habe eine ASP.net-WebForms-Seite, die oben auf dem Bildschirm eine Menge Inhalt enthält. Es hat eine Link-Schaltfläche, über die auf die Seite gepostet wird und ein anderer Bereich der Seite angezeigt wird. Wenn die Seite aktualisiert wird, möchte ich den Fokus einstellen und zu diesem Abschnitt der Seite scrollen.
Ich habe es versucht
txtField.Focus()
in meinem Code hinter und es wird den Fokus setzen und versuchen, dort zu scrollen, aber dann nach rechts zurück zum Anfang. Der Fokus liegt immer noch auf meinem Textfeld, aber die Position des Bildschirms befindet sich ganz oben. Der Link befindet sich oben auf dem Bildschirm, wodurch das Postback verursacht wird. Ich möchte bis ganz nach unten scrollen. Er führt dies kurz aus und scrollt dann ganz nach oben.
Ich habe das Einstellen versucht
Page.MaintainScrollPositionOnPostback = false;
aber das scheint auch nicht zu helfen.
Gibt es eine Möglichkeit, wie ich es erzwingen kann, zu einer bestimmten Position zu gelangen? Ist es möglich, der URL ein Ankertag hinzuzufügen, wenn ich mit einem Button oder einem Link-Button ein Postback mache?
Page.MaintainScrollPositionOnPostBack = true;
sollte Sie zu derselben Position auf dem Bildschirm bringen, aber Sie können AJAX verwenden oder Sie können SetFocus()
verwenden, um sich nach dem Postback auf ein bestimmtes Steuerelement zu konzentrieren:
Sie können den Code unten verwenden, wenn Sie einen Anker für den Standort haben:
ClientScript.RegisterStartupScript(this.GetType(), "hash", "location.hash = '#MOVEHERE';", true);
In Ihrem Fall empfehle ich Ihnen, den Standardwert von Page.MaintainScrollPositionOnPostBack beizubehalten und die reine JavaScript-Scrolling-Funktion zu verwenden
function scrollToDiv()
{
document.getElementById('yourDiv').scrollIntoView();
}
Und rufen Sie es beim Start der Seite mit einer kurzen Verzögerung von 1ms auf (reines Javascript erneut)
setTimeout(scrollToDiv, 1);
Und schließlich rufen Sie es mit dem RegisterStartupScript (hinter dem C # -Code) auf (js wird ausgeführt, nachdem die gesamte Seite geladen wurde):
ScriptManager.RegisterStartupScript(Page, typeof(Page), "ScrollToADiv", "setTimeout(scrollToDiv, 1);", true);
Auf diese Weise wird das automatische Scrollen von asp umgangen
versuche dies
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack) {
string targetId = Page.Request.Params.Get("__EVENTTARGET");
Page.ClientScript.RegisterStartupScript(this.GetType(), "focusthis", "document.getElementById('" + targetId + "').focus()", true);
}
}
Diese scrollen automatisch zum gewünschten Div in asp.net Control Dies ist Functioncall von wo Sie wollen Und auch Java-Skriptdatei herunterladen
OnClientClick = "return scrollGrid ()"
function scrollGrid1 () { $ ('html, body'). animieren ( { scrollTop: $ ('# Div1'). offset (). top }, 'langsam' ) }
Ich habe
<asp:MultiView ID="mvAriza" runat="server">
<asp:View ID="View14" runat="server">
............ .......
</asp:View>
</asp:MultiView>
auf der * .aspx-Seite. Und auf der * .aspx.cs-Seite auf eine Schaltfläche klicken.
Page.SetFocus(mvAriza.ClientID);
Es funktioniert super.
Page.MaintainScrollPositionOnPostback = true
scheint gut zu funktionieren.
Ich habe Matthieu Charbonnier answer ausprobiert, aber es hat nicht funktioniert, es sei denn, ich habe hinzugefügt
" window.scrollTo = function () { };"
Ich habe eine Hilfsmethode erstellt, die in Chrome, FireFox und IE funktioniert
public static void ScrollToControl( Page page, string clientId, bool alignToTop)
{
//NOTE: if there are more than one call on the page, first one will take preference
//If we want that last will take preference, change key from MethodBase.GetCurrentMethod().Name to anchorName
//recommended in http://gnidesign.blogspot.com.au/2011/06/how-to-maintain-page-scroll-on-postback.html
String script = " window.scrollTo = function () { };" + Environment.NewLine;
script += String.Format("document.getElementById('{0}').scrollIntoView({1});" , clientId, alignToTop.JSToString());
page.ClientScript.RegisterStartupScript(TypeForClientScript(), MethodBase.GetCurrentMethod().Name, script, true );
//return script;
}
public static string JSToString(this bool bValue)
{
return bValue.ToString().ToLower();
}
Verwenden Sie getElementById ('{0}'). ScrollIntoView ist einfacher als location.hash, da Sie kein zusätzliches Ankerelement hinzufügen müssen.
Der Parameter alignToTop ist sehr praktisch, um anzugeben, ob Sie die Steuerung am oberen oder unteren Bildschirmrand anzeigen möchten.