我对时间值和多个时区感到头疼。 我以 UTC 时间存储新的 DateTime 值,但当我尝试使用 LinqDataSource 和 GridView 修改它们时遇到问题。
我可以轻松地显示正确的时间
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# TimeManager.ToLocalTime((DateTime)Eval("OrderDate")) %>' />
</ItemTemplate>
目前,这将使数据库中存储的 UTC 时间增加 1 小时。
但是,绑定(bind)回源并不容易。 Bind("OrderDate") 不能像 TimeManager.ToGlobalTime((DateTime)Bind("OrderDate")) 那样进行修改。
我正在考虑使用 LinqDataSource 的 OnUpdating 事件将值更新为全局时间,但是如果用户修改其他字段而不是日期字段怎么办?他每次更新记录的时间值都会小一小时。
比较新旧值也不是很好,因为用户可以修改日期时间的日期部分而不是时间,这受时区的影响?
如果我有办法在 gridview 的所有状态中显示本地时间,那么我可以轻松使用 LinqDataSource 的 OnUpdating。
请分享您的想法...
最佳答案
您是否考虑过更改您的模型?我们假设您要绑定(bind)的对象的名称是 CustomerOrder。您可以将以下类添加到您的项目中(与 Linq 对象位于同一命名空间中):
public partial class CustomerOrder
{
public DateTime LocalOrderDate
{
get { return TimeManager.ToLocalTime(OrderDate); }
set { OrderDate = TimeManager.ToUTCTime(value); }
}
}
现在,不再绑定(bind)到 OrderDate,而是绑定(bind)到 LocalOrderDate。这将自动将 UTC/本地时间转换为 OrderDate。
(注意:我假设您已正确定义 TimeManager.ToLocalTime() 和 TimeManager.ToUTCTime())
关于asp.net - 如何在asp.net中修改Bind ("MyValue"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/520013/