Javascript 什么是本地化Asp.NETWebForms验证程序的正确方法?

Javascript 什么是本地化Asp.NETWebForms验证程序的正确方法?,javascript,asp.net,Javascript,Asp.net,我正在尝试使用验证器组件,但夏令时有问题 这一切都是从一个全新网站项目的简单标记开始的: <form id="form1" runat="server"> <div> <asp:TextBox ID="TextBoxTest" runat="server"></asp:TextBox> <asp:RangeValidator ID="RangeValidatorTest" runat="server" Type="Date"

我正在尝试使用验证器组件,但夏令时有问题

这一切都是从一个全新网站项目的简单标记开始的:

<form id="form1" runat="server">
<div>
  <asp:TextBox ID="TextBoxTest" runat="server"></asp:TextBox>
  <asp:RangeValidator ID="RangeValidatorTest" runat="server"
    Type="Date" MinimumValue="17/09/2013" MaximumValue="12/11/2014"
    ControlToValidate="TextBoxTest" ErrorMessage="Invalid Date">
  </asp:RangeValidator>
</div>
</form>
在我的机器上,第一行日期对象的构造函数使用2013、10和20作为参数创建一个对象,其参数如下:Sat Oct 19 23:00:00 UTC-0300 2013。这意味着它尊重我的Windows配置,并且由于夏令时的开始而自动减去1小时。正因为如此,日期部分与原始部分不同,这使得验证失败,就好像它是无效日期一样

这就是它的工作方式吗?看起来验证程序的Javascript并不像我想的那样是动态的

我如何使用夏令时和那些验证器

顺便说一下,我在VisualStudio2010(以及所有可用的服务包)和.NETFramework4.0上做了这个测试

如果我使用Asp.NETMVC,我知道一些解决这个问题的方法,但是这个例子属于用WebForms构建的更大的系统

为了清晰起见,这里有两个调试器屏幕:


您的系统时区是什么?它也是GMT/UTC-03,作为客户端javascript上生成的日期。禁用windows配置后,一切正常(因为系统不会尝试自动减去一小时)。谢谢你的帮助。我可以在当前版本的Firefox和Chrome中重现这个问题,但不能在IE11预览版中重现。因此,我不确定该漏洞是在浏览器中还是在ASP.NET验证脚本中。这里有一个解决方法:将整个
ValidatorConvert
函数复制并粘贴到
中的
块中。(必须位于
标记之后,而不是
中或
之前的任何位置)更改计算
日期的行,如下所示:
var date=新日期(年、月、日、12)确实有效。IE9和IE10也有这个问题。我想知道IE11是否不依赖Windows设置来生成日期对象。他们最终可能会在发布之前改变这一点。我相信这是javascript引擎的问题。在我看来,它不应该依赖于Windows设置。大多数人可能只是转到CustomValidator,但这对我来说是不可能的,因为验证器都分布在多个页面中。无论如何,谢谢你抽出时间。我真的很感激。
var date = new Date(year, month, day);

return (typeof(date) == "object" && year == date.getFullYear() && month == date.getMonth() && day == date.getDate()) ? date.valueOf() : null;