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!

Author: user3250365, 2015-05-30

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.

 1
Author: Neps, 2017-05-23 11:58:33
Talvez alguém tenha mudado o formato de data no windows so no computador antigo? Mas que tal tentar forçá-lo dentro do seu application...my a ideia é fazê-lo no Global.asax file (você pode ter que adicionar esse arquivo à raiz da aplicação se ela não estiver já lá). Então, algo assim:
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;
}
 0
Author: Rob Johnston, 2015-05-30 02:32:54

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.

 0
Author: Anil, 2015-05-30 02:44:49