When any control in an ASP.NET WebForm does a postback to the
server, the page scrolls to the top after the postback is completed. Users will
find the process of scrolling down to the place where they posted the form cumbersome.
This article explains how to retain a page's scroll position after a postback to the server.
ASP.NET automaticaly creates two HTML hidden fields when a server side form contains controls
that performs postback to the server. These fields are given below (they can be seen by viewing
the source code of the page):
<input type="hidden" name="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" value="" />
|
The __doPostBack() client side JavaScript function is automatically generated by ASP.NET to handle the postback event.
The value for these hidden fields will be set in the client script handler as shown below:
<script language="javascript">
<!--
function __doPostBack(eventTarget, eventArgument) {
var theform = document.ctrl0;
theform.__EVENTTARGET.value = eventTarget;
theform.__EVENTARGUMENT.value = eventArgument;
theform.submit();
}
// -->
</script>
|
The value of the __EVENTTARGET field will be set to the name of the control which does the postback. This value
can be accessed from the server-side by using Request.Form ["__EVENTTARGET"].
To enable the page to retain its scroll position, a HTML anchor
is created just above the control that does the postback. The name of the anchor
should be the same as that of the control.
<a name="#DROPDOWN1"></a>
<ASP:DropDownList id=DropDown1 runat="server" AutoPostBack="True">
<ASP:Listitem Text="Horizontal"/>
<ASP:Listitem Text="Vertical"/>
</ASP:DropDownList/>
|
A client-side JavaScript, coded at the end of the page, is executed after the page loads.
This causes the page to scroll to the anchor from where the postback occurred.
<script runat="server">
location.href="#<%=Request.Form["__EVENTTARGET"]%>";
</script>
|