【发布时间】:2012-04-10 22:02:30
【问题描述】:
我有一个用 ASP.NET 编写的网页,我需要在Page_Load 检索最终用户的本地时间。我考虑过使用 Javascript 来获取本地时间(通过使用 new Date()),但问题是脚本是在服务器事件之后运行的。
关于如何实现这一点的任何想法?
编辑:我的页面非常复杂:它显示了一个图表,其中包含来自数据库、对象/字段选择列表等的大量计算字段;客户现在要求它应该考虑用户的时区,并且时区应该由网页自动确定。用户日期对于确定图表间隔(显示数据的日期)很重要。
数据加载(因为它非常复杂)在Page_Load 和Page_PreRender 中完成。放弃这些事件需要整页重写。
受答案启发的最终解决方案: 这是我最终解决问题的方法。我将本地日期保存在 cookie 中。这是设置cookie的方法:
function SetLocalDateCookie() {
var cookieName = 'LOCALDATE';
var localDate = new Date();
var realMonth = localDate.getMonth() + 1;
var localDateString = localDate.getFullYear() + "/" + realMonth + "/" + localDate.getDate();
setCookie(cookieName, localDateString, 2);
try {
var exdate = new Date();
exdate.setDate(exdate.getDate() + 2);
document.cookie = cookieName + "=" + escape(localDateString) + ";expires=" + exdate.toGMTString();
}
catch (e)
{ }
}
在我的母版页中,我在 $(document).ready 上调用此方法。
在我使用此 cookie 的页面上,我将以下代码添加到 Page_Init:
if (string.IsNullOrEmpty(CookieHandler.Instance.GetCookie(CookieKeys.LocalDate)))
{
Response.ClearContent();
Response.Write(@"<form id='local' method='post' name='local'>
<script type='text/javascript'>
SetLocalDateCookie();
document.getElementById('local').submit();
</script>
</form>");
Response.Flush();
Response.End();
}
然后我可以在 C# 代码中使用 cookie 值。 感谢您的回答/cmets!
【问题讨论】:
-
您希望用户的本地时间在您的服务器事件运行之前?
-
我也考虑过使用cookie...但是它的值需要不断更新(它必须保存一个日期时间);还有第一次加载页面并且没有设置 cookie 时会发生什么?
-
这样做的目的是什么?为什么初始页面加载日期/时间不够用?
-
你需要这个本地日期时间做什么?可能还有其他方法可以实现您的最终目标
-
是的,我知道了。但是你为什么这么快就需要它呢?你打算用它做什么?哪些服务器事件需要使用它,为什么?目前我唯一能想到的是你需要它来在那个页面上显示,但如果是这种情况,你可以在页面加载时用 javascript 修改显示
标签: c# javascript asp.net timezone