2015-05-30 3 views
0

Для фона мы находимся в процессе обновления до Windows Server 2012 R2, и тестирование показало, что некоторые текстовые поля ввода даты на нашем сайте ASP.NET не работают должным образом. В текстовых полех для них определен параметр CompareValidator, чтобы проверить, установлена ​​ли одна дата позже другой.ASP.NET сгенерированный код: откуда берется «датапорядок»?

<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», то «ГМД» модель не соответствует и валидатор возвращает ложь. Я изменил настройки формата даты везде, о которых я мог думать, и даже попытался изменить настройки .NET Глобализации на сайте IIS, чтобы использовать другую культуру (en-GB), и ничего не сработало. Мне очень любопытно, откуда эта настройка «ymd», и как ее изменить. Любая помощь приветствуется. Благодаря!

ответ

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; 
} 
+0

Отредактировано потому, что я думал, что вы хотели ymd вместо dmy. –

+0

Мы пробовали это без успеха, возможно, из-за настроек культуры в нашей CMS. После отладки глобального кода, чтобы убедиться, что он запущен, мы проверили CurrentCulture на странице, а формат даты - не тот, который мы установили. Спасибо за предложение. – user3250365

0

Вы пытаетесь изменить дату сортировки из региональных настроек панели управления. Атрибут Dateorder и cutoffyear и т. Д. Используются для проверки подлинности JavaScript, сгенерированного с помощью .net, для управления валидатором для работы в браузере. Значение этих параметров зависит от настроек сервера. IIS выбирает только конфигурацию сервера и генерирует HTML.

0

«dateorder» происходит от 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, что региональные настройки являются для каждого пользователя, и вы можете проверить счет пул приложений бегал под ,

+0

Мы попытались изменить настройки для пользователя пула приложений, но все равно не играли в кости. После большой царапины головы мы наконец нашли виновника, который является нашей CMS, которая хранит настройки культуры для каждой страницы. Все параметры IIS и системы переопределены этими. – user3250365

+0

Кстати, где вы получили этот сегмент кода для 'BaseCompareValidator'? – user3250365

+0

Из источника MVC asp.net на странице https://github.com/aspnet/mvc – Neps

Смежные вопросы