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")
Другие вопросы по тегам