ASP.NET生成的代码:“dateorder”来自哪里?

时间:2015-05-30 01:53:16

标签: asp.net .net iis globalization

对于后台,我们正在升级到Windows Server 2012 R2,并且测试显示我们的ASP.NET站点上的某些日期输入文本框未按预期工作。文本框具有为其定义的CompareValidator,以检查一个日期是否晚于另一个日期。

<asp:CompareValidator ID="CompareValidator3" runat="server" ControlToCompare="txtStartDate"
ControlToValidate="txtEndDate" ErrorMessage="..." Operator="GreaterThan" Type="Date"
Display="Dynamic"></asp:CompareValidator>

这个CompareValidator现在一直在Windows Server 2012上失败,而Windows Server 2008上托管的旧站点没有这个问题。我已经做了一些挖掘,我认为最可能的罪魁祸首是Windows Server 2012中加拿大地区的默认日期格式的更改。在生成的页面代码中,验证程序的DOM元素具有始终属性“dateorder”被设置为“ymd”。这个值在旧网站上是“dmy”。

...
cutoffyear: "2029"
dataset: DOMStringMap
dateorder: "ymd"
dir: ""
display: "Dynamic"
...

因为我们的输入采用类似“01/01/2015”的日期字符串,所以“ymd”模式不匹配,验证器返回false。我已经在任何地方更改了日期格式设置,甚至尝试将IIS站点的.NET全局化设置更改为使用其他文化(en-GB),但没有任何工作。我真的很好奇这个“ymd”设置的来源,以及如何改变它。任何帮助是极大的赞赏。谢谢!

3 个答案:

答案 0 :(得分:1)

&#34; dateorder&#34;来自BaseCompareValidator,基本上是CultureInfo.CurrentCulture

DateTimeFormatInfo dateTimeFormat = CultureInfo.CurrentCulture.DateTimeFormat;
string pattern = dateTimeFormat.ShortDatePattern;
string dateorder = (pattern.StartsWith ("y", true, Helpers.InvariantCulture) ? "ymd" : (pattern.StartsWith ("m", true, Helpers.InvariantCulture) ? "mdy" : "dmy"));

现在指向here的问题是,区域设置是按用户进行的,您可能需要检查运行应用程序池的帐户。

答案 1 :(得分:0)

也许有人在旧电脑上更改了Windows操作系统中的日期格式?但是如何在你的应用程序中强制它...我的想法是在Global.asax文件中执行它(你可能必须将该文件添加到应用程序的根目录,如果它还没有)。然后,这样的事情:

using System.Globalization;
using System.Threading;

protected void Application_BeginRequest(Object sender, EventArgs e)
{    
  CultureInfo myCulture = (CultureInfo) System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
  myCulture.DateTimeFormat.ShortDatePattern = "dd-MM-yyyy";
  myCulture.DateTimeFormat.DateSeparator = "-";
  Thread.CurrentThread.CurrentCulture = myCulture;
}

答案 2 :(得分:0)

您是否尝试从控制面板区域设置更改排序日期。日期顺序和cutoffyear等属性由.net生成的验证JavaScript用于验证器控件以在浏览器上运行。这些值来自服务器设置。 IIS只根据服务器配置选择并生成HTML。