ASP.NET CalendarExtender Изменить культуру на панели Ajax без обновления страницы?
У меня есть страница ASP.NET, которая использует ASP.NET CalenderExtender внутри Ajax UpdatePanel. Пользователь может выбрать один из нескольких языков. Мне нужно, чтобы календарь менялся с обновленной информацией о культуре без обновления всей страницы.
Информация о культуре обновляется для темы
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(culture)
А также
EnableScriptGlobalization="true"
EnableScriptLocalization="true"
Что еще мне нужно сделать?
1 ответ
Смутно связано с тем, над чем я сейчас работаю... пара советов, которые могут помочь: - Я также делаю это сразу после выполнения "Thread.CurrentThread.CurrentCulture = ..."
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
Я лично строю свой CalendarExtender динамически, но важной строкой является формат:
ce = new CalendarExtender();
ce.ID = "CalExtender";
ce.Format = ShortDatePatternDoubleDigit;
и в другом месте у меня есть этот статический метод:
public static string ShortDatePatternDoubleDigit
{
get
{
string shortDatePattern = Thread.CurrentThread.CurrentUICulture.DateTimeFormat.ShortDatePattern;
if (!shortDatePattern.Contains("MM"))
shortDatePattern = shortDatePattern.Replace("M", "MM");
if (!shortDatePattern.Contains("dd"))
shortDatePattern = shortDatePattern.Replace("d", "dd");
if (!shortDatePattern.Contains("yyyy"))
shortDatePattern = shortDatePattern.Replace("yy", "yyyy");
return shortDatePattern;
}
}
поскольку у нас есть клиенты в США и Великобритании, дата должна работать в мм / дд / гггг или дд / мм / гггг (и мы используем расширитель редактирования в маске, поэтому мы используем две цифры для дней и месяцев).
На стороне клиента, в javascript я могу получить доступ к строке формата, как это (getter), но я не знаю, можно ли это установить, я не пробовал. Это может помочь вам в сценарии "без обратной передачи":
var dateBox = $get('xxxx_DatePicker_TextBox');
var dateFormat = dateBox.CalendarBehavior._format; //this contains dd/MM/yyyy for example
Обратите внимание, что вам, возможно, придется изменить этот формат еще раз, например, я использую указатель даты jQuery UI, а MM интерпретируется как полное имя месяца, тогда как в C# MM это двузначный месяц. Хуже того, yyyy в C# - это четырехзначный год, но для jQuery datepicker yy - это четырехзначный год, так что yyyy закончится с 20152015. Вы можете сделать грязную:
_format.replace(/M/g, "m").replace(/yy/g, "y")