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完全加载后被调用.
这怎么可能呢?
你在这里混淆了两个完全不同的"加载"事件.
首先,服务器端代码(在你的情况下ASP.NET)中运行的全部.在这个循环中,会发生一些事情,其中包括事件Load和LoadComplete事件.
当服务器完成确定应该呈现的内容时,它开始向浏览器发送内容(通常是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库,可以用于无数的东西,在这种特定的情况下,它将更容易找到标签控件.
| 归档时间: |
|
| 查看次数: |
21311 次 |
| 最近记录: |