ASP.NET código gerado: de onde vem "dateorder"?
para o fundo, estamos em processo de atualização para o Windows Server 2012 R2, e testes revelaram que algumas caixas de texto de entrada de data em nosso ASP.NET o site não está a funcionar como planeado. As caixas de texto têm um Comparevalidador definido para verificar se uma data é posterior à outra.
<asp:CompareValidator ID="CompareValidator3" runat="server" ControlToCompare="txtStartDate"
ControlToValidate="txtEndDate" ErrorMessage="..." Operator="GreaterThan" Type="Date"
Display="Dynamic"></asp:CompareValidator>
Este Comparevalidador está a falhar o tempo todo agora, no Windows Server 2012, enquanto o antigo site hospedado no Windows Server 2008 não tinha este problema. Investiguei um pouco e ... pense que o culpado mais provável é a mudança no formato de data padrão para a região do Canadá no Windows Server 2012. No código gerado para a página, o elemento DOM para o validador tem uma propriedade "dateorder" que está sempre sendo definido para "ymd". Este valor é " dmy " no site antigo.
...
cutoffyear: "2029"
dataset: DOMStringMap
dateorder: "ymd"
dir: ""
display: "Dynamic"
...
porque as nossas entradas levam strings de datas como" 01/01/2015", o padrão" ymd " não é correspondido e o validador devolve falso. Eu mudei as configurações de formato de data em todos os lugares que eu posso pensar, e até tentou mudar as configurações de globalização do site. NET do IIS para usar outra cultura (en-GB), e nada funcionou. Estou muito curioso sobre de onde vem este cenário de ymd, e como mudá-lo. Qualquer ajuda é muito apreciada. Obrigado!
3 answers
"dateorder" vem de BaseCompareValidator
que basicamente lê 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"));
Agora o gotcha como apontado aqui , é que a configuração Regional é por Utilizador e você pode querer verificar a conta em que o conjunto de aplicações estava a correr.
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;
}
Já tentou mudar a data de ordenação da configuração regional do painel de controlo. O atributo Dateorder e cutoffyear etc é usado pelo JavaScript de validação gerado pelo. net para o controle de validação para funcionar no navegador. O valor destes vem das configurações do servidor. O IIS só escolhe como configuração do servidor e generats HTML.