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>