wake-up-neo.com

ASP.net Postback - Blättern Sie zu einer bestimmten Position

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?

22
Dismissile

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:

http://msdn.Microsoft.com/de-de/library/ms178232.aspx

29
Theomax

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);
28
dvdmn

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);

        }
    }
0
Rana

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' ) }

0
Suraj

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.

0
Hysen

Page.MaintainScrollPositionOnPostback = true scheint gut zu funktionieren.

0
Mike S.

Ich habe Matthieu Charbonnier answer ausprobiert, aber es hat nicht funktioniert, es sei denn, ich habe hinzugefügt

" window.scrollTo = function () { };" 

wie es in http://gnidesign.blogspot.com.au/2011/06/how-to-maintain-page-scroll-on-postback.html vorgeschlagen wurde

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.

0