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

Joh*_*020 1 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> 
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在服务器端的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 ";
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

这怎么可能呢?

Tom*_*han 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...";
}
Run Code Online (Sandbox Code Playgroud)

客户端:

<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();">
Run Code Online (Sandbox Code Playgroud)

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