Hej, Jag ljög visst lite i mitt exempel ovan. Min variabel myVar deklareras egentligen i en javascript-fil. Denna fil inkluderas (en enda gång) i mitt web formulär. Längre ner i formuläret sätts den sedan till 1. Typ: Här kommer kod från ett litet testprogram jag gjort för att "besvisa" problemet:SmartNavigation driver mig till vansinne!
I det projekt jag arbetar har man valt att sätta smartNavigation="true" i web.config för att minska "blinkningar" vid post back (vi använder inte AJAX) etc. Dock, med detta påslaget börjar mina JavaScript att spåra ur på de mest mystiska sätt.
Bl.a. har jag en RegisterClientScriptBlock på en sida som utförs (villkorslöst) i Page_Load. I detta skriptblock skapar jag en variable, typ "var myVar = 1;". Första gången sidan laddas i browsern är myVar = 1, men efter en post back är myVar = undefined. Slår jag av smart navigation fungerar allt som det skall.
Jag har googlat vilt efter information om vilka förhållningsregler som gäller om man aktiverar smartNavigation men inte hittat så mycket matnyttigt. Är det någon som har erfarenhet av dylika problem eller känner till någon bra källa till information?Sv: SmartNavigation driver mig till vansinne!
<body>
<script type="text/javascript" src="/myScript.js"></script>
myVar = 1;
...
Efter att ha kört Fiddler kunde jag konstatera att vi post back laddas myScript.js 3 gånger, vilket verkar mysko i mina ögon. Jag lade då in två alerts, alert('1') efter myVar = 1 och alert('2') sist i myScript,js. Det visade sig då att vid post back kommer tvåan före ettan! På så sätt sätts ju myVar till null efter att ha satts till 1. Hur kan det bli på detta viset? Sv:SmartNavigation driver mig till vansinne!
Default.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" SmartNavigation="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click" />
</div>
</form>
</body>
</html>
Default.aspx.cs:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
TextBox1.Text = DateTime.Now.ToString();
}
protected override void OnPreRender(EventArgs e)
{
Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "test1", "default.aspx.js");
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "test2", "alert('In aspx file');", true);
base.OnPreRender(e);
}
}
Default.aspx.js:
alert("In script file");
Varje gång sidan visas får man två alerts,”In script file” följt av ”In aspx file”. Om man trycker upprepade(!) gånger på submit-knappen kan man dock, förr eller senare, få dessa i omvänd ordning – vilket jag tycker inte borde kunna ske.