DevTrain .NET Developers Home. Das Community Portal für ASP.NET, Visual Basic, C#
 
  Login Status: Hallo   Anmelden  Suche:  
Navigationslinks überspringen
Startseite
Artikel
Blogs
Foren
ClubClub erweitern

 
Ihre Optionen
Save
Mail
Print
Rate
 
Advertising
  Advanced Developers Track vom 24.-25. Februar 2010 im ehem. IMAX München

 
Navigationslinks überspringen
Autor:Hannes Preishuber

Webbrowser Position wiederfinden.

Webseiten können länger als der Bildschirm sein. Der Benutzer scrollt dann nach unten und clickt dort auf einen Link oder Button. ASP.NET arbeitet per Round Trip am Server die Daten ab und schickt die Website wieder zum Browser.
Der Benutzer findet sich dann wieder am Anfang der Seite.

Das kann doch nicht sein!

Natürlich sollte der Benutzer wieder an der gleichen Stelle im HTML Dokument stehen.
Um Postionierungen vorzunehmen wird oft ein Anker verwendet. Dies ist eine Sprungmarke die dann per Querystring angesteuert werden kann.

index.htm#Marke1


Die Marke wird im Dokument mit einem Link definiert. Dabei wird im Attribut Name der Name der Sprungmarke definiert.

<a name="Marke1">text</a>

Um damit die Urspungsposition wieder zu erreichen, muss man diese zunächst kennen. Wenn Sie Textmarken verwenden, müssen sie in jedem Hyperlink die Marke mitgeben. Zusätzlich werden im Dokument zahlreiche Marken benötigt um eine halbwegs genaue Anzeige der letzten Position zu ermöglichen.

Wenn JavaScript aktiviert ist, lässt sich das mit der Client Funktion Scrolltop genauer und einfacher erledigen. Dabei kann damit die Position Pixelgenau gelesen und gesetzt werden.

Allerdings muss dafür gesorgt werden, das der Client sich zwischen zwei Seite die Position auch merken kann.

Dafür wird ein verstecktes Eingabefeld mit einem unüblichen Namen angelegt. Das soll Konflikte mit anderen Feldern verhindern.

<INPUT type="hidden" name="__pos1">

Beim schliessen der Seite muss dafür gesorgt werden, das dieses Feld mit der aktuellen Position beschrieben wird.
Das Script kann in onClose oder an einem Button gehängt werden.
Einzig an das Objektmodell des Browsers (DOM) muss man sich vielleicht noch gewöhnen. Das Feld findet sich unterhalb des Form Elements. Dessen ID (Form1) wird zusammen mit der ID des Hidden Input Feldes verwendet um den Wert in value zuzuweisen. Denken Sie daran, das JScript Case Sensitiv ist!
Die Position findet sich wiederum im Body Element dessen ID bei unserem Beispiel  Haupt ist.

Form1.__pos1.value=Haupt.scrollTop

Wenn die Page geladen wird, muss ein JScript dafür sorgen, das das Hidden Field gelesen wird und die Position mit ScrollTop verändert wird. Dazu wird per Requesr.Form der übergebene Wert wieder ausgelesen und wieder an den Browser zurückgesandt.
Es gäbe hier mehrere Möglichkeiten das Jscript zusammenzusetzen. In diesem Beispiel wird es per String vorbereitet. Mit der ASP.NET Funktion RegsiterStartupscript wird es dann an in die Seite gepackt und vom Browser beim Start ausgeführt.

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If IsPostBack Then
            Dim scr As String
            scr = "<script language=jscript>Haupt.scrollTop=" + Request.Form("__pos1").ToString + ";</script>"
            RegisterStartupScript("start", scr)

        End If
        Button1.Attributes.Add("onClick", "JScript:Form1.__pos1.value=Haupt.scrollTop;")
End Sub


Im von ASPX erzeugten HTML Quellcode findet sich das Script übrigens nicht am Anfang sondern eher am Ende.

<script language=jscript>Haupt.scrollTop=367;</script>

 


Diskutieren Sie in den Foren

Business Compact vom 24.-25. Februar 2010 im ehem. IMAX München