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"

Что еще мне нужно сделать?


person barna10    schedule 27.12.2014    source источник


Ответы (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 я могу получить доступ к строке формата, подобной этой (геттер), но я не знаю, можно ли ее установить, я не пробовал. Это может помочь вам в сценарии «без обратной передачи»:

var dateBox = $get('xxxx_DatePicker_TextBox');
var dateFormat = dateBox.CalendarBehavior._format; //this contains dd/MM/yyyy for example

Обратите внимание, что вам, возможно, придется снова изменить этот формат, например, я использую средство выбора даты пользовательского интерфейса jQuery, а MM интерпретируется как полное имя месяца, тогда как в C# MM — это двузначный месяц. Хуже того, yyyy в C# — это четырехзначный год, но для средства выбора даты jQuery yy — это четырехзначный год, так что yyyy в конечном итоге будет 20152015. Вы можете сделать грязное:

_format.replace(/M/g, "m").replace(/yy/g, "y")
person Thierry_S    schedule 20.02.2015