在页面加载之前运行ASP.Net LoadComplete事件?

时间:2011-04-14 15:57:17

标签: javascript asp.net

我需要计算加载页面时UTC时间的当前偏移量。这可以通过javascript函数调用非常简单地作为页面的body onload事件的一部分来完成,如下所示:

<script type="text/javascript" language="javascript">

    function getOffset() {
        var curUTCDate = new Date();
        var iMins = curUTCDate.getTimezoneOffset();
        return iMins;
    }
</script>

<body id="bodymain" onload="javascript:document.forms[0]['hdnOffset'].value=getOffset();">
<form id="form1" runat="server">

    <input id="hdnOffset" runat="server"/>
    <asp:Label ID="lblText" runat="server"></asp:Label> 

但是当我尝试在服务器端作为Page_LoadComplete的一部分使用后面的代码中的这个值时,偏移值没有设置如下所示

protected void Page_LoadComplete(object sender, EventArgs e)
    {
        if (!String.IsNullOrEmpty(hdnOffset.Value))
        {
            lblText.Text = hdnOffset.Value + " value set";
        }
        else
        {
            lblText.Text = " value not set ";
        }
    }

然而,一旦页面完全呈现,偏移确实可用,因为它的值现在显示在输入框中。所以对我来说,这看起来好像作为body onload事件的一部分调用的javascript只在Page完全加载后被调用。

这怎么可能?

3 个答案:

答案 0 :(得分:8)

你在这里混淆了两个完全不同的“加载”事件。

首先,服务器端代码(在您的情况下为ASP.NET)完整地运行 。在此周期中,会发生一些事情,其中​​包括LoadLoadComplete事件。

当服务器完成应该呈现的内容时,它开始向浏览器发送内容(通常是HTML和JavaScript)。在浏览器端,触发另一个 load事件 - 页面上<body>元素的事件。它们的名字相同,但它们完全独立。

要解决此问题,请在服务器端将lblText.Text设置为"value not set",并在更改偏移指示符时在JavaScript中更改它。

服务器端:

protected void Page_LoadComplete(object sender, EventArgs e)
{
    // Possibly even better to do this in the properties of the control...
    lblText.Text = "value not set...";
}

客户方:

<script type="text/javascript" language="javascript">
    function setOffset() {
        var curUTCDate = new Date();
        var iMins = curUTCDate.getTimezoneOffset();
        document.forms[0]['hdnOffset'].value = iMins;
        document.getElementById('lblText').innerHtml = 'value set';
    }
</script>

<body id="bodymain" onload="javascript:setOffset();">

如果您没有使用ASP.NET 4,您可以在其中对控件的客户端ID进行广泛控制,那么您应该查看jQuery。它是一个javascript库,可以用于无数的东西,在这种特定的情况下,它可以更容易地找到标签控件。

答案 1 :(得分:2)

ASP.Net将在将HTML返回浏览器之前完成页面处理,此时调用onload函数。

答案 2 :(得分:0)

请参阅以下链接,了解页面生命周期..

http://msdn.microsoft.com/en-us/library/ms178472.aspx