By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
444,078 Members | 1,846 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 444,078 IT Pros & Developers. It's quick & easy.

smart nav = no client side unload event

P: n/a
Hal
My most sincere gratitude to anyone who can help me work
around this!

I have work that needs to be done in javascript on the
client whenever a page is unloaded.

To this end, I subscribe to the unload event (client side
not server side) of the <body> HTML element through
javascript.

However, if I turn on smart navigation, any button that
does a server.transfer fails to fire the client side
unload event.

I have included two example pages that duplicate the
behavior. To run the example, create two pages called
webform1.aspx and webform2.aspx and copy the html and code
from this message.

Any explanation or work around is greatly appreciated!

Thanks for your time.

Hal

**********************
Webform1.aspx:
**********************
<%@ Page language="c#" Inherits="System.Web.UI.Page"
smartNavigation="True"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN" >
<HTML>
<HEAD>
<meta name="GENERATOR" Content="Microsoft
Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript"
content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<form id="Form1" method="post"
runat="server">
<script language="javascript">
function __OnLoad()
{
alert("Form1
Load");
}
function __OnUnLoad()
{
alert("Form1
UnLoad");
}
</script>
<script language="C#"
runat="server">
void btnTransferForm2_Click
(object sender, System.EventArgs e)
{

this.Server.Transfer("Webform2.aspx");
}
void btnRedirForm2_Click
(object sender, System.EventArgs e)
{

this.Response.Redirect("Webform2.aspx");
}
</script>
<P>Form1.aspx SmartNav=True
</P>
<P><a
href="WebForm2.aspx">Naviagate to
Webform2.aspx</a>&nbsp;this will also fire
the unload event</P>
<P>
<asp:Button
id="btnTransferForm2" runat="server"
OnClick="btnTransferForm2_Click" Text="Transfer To
Form2"></asp:Button>&nbsp;click
this button to transfer to
page 2 and see that the unload jscript routine does
not fire</P>
<P>
<asp:Button
id="btnRedirForm2" runat="server"
OnClick="btnRedirForm2_Click" Text="Redirect To
Form2"></asp:Button>&nbsp;this
will fire the unload event
</P>
<script language="javascript">
<!--
window.attachEvent
("onload", __OnLoad);

//document.body.onload = __OnLoad;
window.attachEvent
("onunload", __OnUnLoad);

//document.body.onunload = __OnUnLoad;
-->
</script>
</form>
</body>
</HTML>

*******************
Webform2.aspx
*******************
<%@ Page language="c#" Inherits="System.Web.UI.Page" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm2</title>
<meta name="GENERATOR" Content="Microsoft
Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript"
content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<form id="Form1" method="post"
runat="server">
<script language="javascript">
function __OnLoad()
{
alert("Form2
Load");
}
function __OnUnLoad()
{
alert("Form2
UnLoad");
}
</script>
<script language="C#"
runat="server">
void btnTransferForm1_Click
(object sender, System.EventArgs e)
{

this.Server.Transfer("WebForm1.aspx");
}

void btnRedirForm1_Click
(object sender, System.EventArgs e)
{

this.Response.Redirect("Webform1.aspx");
}
</script>
<P>Form2.aspx SmartNav=False</P>
<P><a
href="WebForm1.aspx">Naviagate to Webform1.aspx</a></P>
<P>
<asp:Button
id="btnTransferForm1" runat="server"
OnClick="btnTransferForm1_Click" Text="Transfer To
Form1"></asp:Button></P>
<P>
<asp:Button
id="btnRedirForm1" runat="server"
OnClick="btnRedirForm1_Click" Text="Redirect To
Form1"></asp:Button></P>
<script language="javascript">
<!--
window.attachEvent
("onload", __OnLoad);

//document.body.onload = __OnLoad;
window.attachEvent
("onunload", __OnUnLoad);

//document.body.onunload = __OnUnLoad;
-->
</script>
</form>
</body>
</HTML>

..
Nov 18 '05 #1
Share this Question
Share on Google+
1 Reply


P: 1
My advice would be to turn smart nav off. It wreaks havoc with javascript. There are other ways to accomplish what smart nav does without the side effects. If your users are using a browser other than IE it doesn't work anyway.

My most sincere gratitude to anyone who can help me work
around this!

I have work that needs to be done in javascript on the
client whenever a page is unloaded.

To this end, I subscribe to the unload event (client side
not server side) of the <body> HTML element through
javascript.

However, if I turn on smart navigation, any button that
does a server.transfer fails to fire the client side
unload event.

I have included two example pages that duplicate the
behavior. To run the example, create two pages called
webform1.aspx and webform2.aspx and copy the html and code
from this message.

Any explanation or work around is greatly appreciated!

Thanks for your time.

Hal

**********************
Webform1.aspx:
**********************
<%@ Page language="c#" Inherits="System.Web.UI.Page"
smartNavigation="True"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN" >
<HTML>
<HEAD>
<meta name="GENERATOR" Content="Microsoft
Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript"
content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<form id="Form1" method="post"
runat="server">
<script language="javascript">
function __OnLoad()
{
alert("Form1
Load");
}
function __OnUnLoad()
{
alert("Form1
UnLoad");
}
</script>
<script language="C#"
runat="server">
void btnTransferForm2_Click
(object sender, System.EventArgs e)
{

this.Server.Transfer("Webform2.aspx");
}
void btnRedirForm2_Click
(object sender, System.EventArgs e)
{

this.Response.Redirect("Webform2.aspx");
}
</script>
<P>Form1.aspx SmartNav=True
</P>
<P><a
href="WebForm2.aspx">Naviagate to
Webform2.aspx</a>&nbsp;this will also fire
the unload event</P>
<P>
<asp:Button
id="btnTransferForm2" runat="server"
OnClick="btnTransferForm2_Click" Text="Transfer To
Form2"></asp:Button>&nbsp;click
this button to transfer to
page 2 and see that the unload jscript routine does
not fire</P>
<P>
<asp:Button
id="btnRedirForm2" runat="server"
OnClick="btnRedirForm2_Click" Text="Redirect To
Form2"></asp:Button>&nbsp;this
will fire the unload event
</P>
<script language="javascript">
<!--
window.attachEvent
("onload", __OnLoad);

//document.body.onload = __OnLoad;
window.attachEvent
("onunload", __OnUnLoad);

//document.body.onunload = __OnUnLoad;
-->
</script>
</form>
</body>
</HTML>

*******************
Webform2.aspx
*******************
<%@ Page language="c#" Inherits="System.Web.UI.Page" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm2</title>
<meta name="GENERATOR" Content="Microsoft
Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript"
content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<form id="Form1" method="post"
runat="server">
<script language="javascript">
function __OnLoad()
{
alert("Form2
Load");
}
function __OnUnLoad()
{
alert("Form2
UnLoad");
}
</script>
<script language="C#"
runat="server">
void btnTransferForm1_Click
(object sender, System.EventArgs e)
{

this.Server.Transfer("WebForm1.aspx");
}

void btnRedirForm1_Click
(object sender, System.EventArgs e)
{

this.Response.Redirect("Webform1.aspx");
}
</script>
<P>Form2.aspx SmartNav=False</P>
<P><a
href="WebForm1.aspx">Naviagate to Webform1.aspx</a></P>
<P>
<asp:Button
id="btnTransferForm1" runat="server"
OnClick="btnTransferForm1_Click" Text="Transfer To
Form1"></asp:Button></P>
<P>
<asp:Button
id="btnRedirForm1" runat="server"
OnClick="btnRedirForm1_Click" Text="Redirect To
Form1"></asp:Button></P>
<script language="javascript">
<!--
window.attachEvent
("onload", __OnLoad);

//document.body.onload = __OnLoad;
window.attachEvent
("onunload", __OnUnLoad);

//document.body.onunload = __OnUnLoad;
-->
</script>
</form>
</body>
</HTML>

..
May 4 '06 #2

This discussion thread is closed

Replies have been disabled for this discussion.