ASP. NET Глобализация и локализация Core Blazor состояния:
Функция Blazor @bind
выполняет форматирование и анализирует значения для отображения на основе текущей культуры пользователя , Доступ к текущей культуре можно получить из System.Globalization.CultureInfo.CurrentCulture property
.
. Это утверждение верно, но проблема в том, что культура должна быть установлена непосредственно перед ее использованием (или, возможно, каждый раз, когда DOM обновляется).
Для демонстрации я буду использовать стандартное приложение счетчика блейзоров. Давайте изменим Counter.razor
@page "/counter"
@using System.Globalization;
<h1>Counter</h1>
<input type="text" @bind="currentDate" />
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private DateTime currentDate = DateTime.Now;
private int currentCount = 0;
private void IncrementCount() {
if (currentCount < 2) Utils.SetCCDateFormat();
currentCount++;
}
public class Utils {
public static void SetCCDateFormat() {
var cc = CultureInfo.CurrentCulture.Clone() as CultureInfo;
cc.DateTimeFormat.ShortDatePattern = "dd-yyyy-m";
CultureInfo.CurrentCulture = cc;
CultureInfo.CurrentUICulture = cc;
}
}
}
В результате:
- при первом отображении страницы текстовое поле содержит дату, отформатированную по умолчанию на сервере.
- когда кнопка нажата первый и второй раз, формат даты -
dd-yyyy-m
Я попытался изменить дату в OnAfterRender
, OnInitialized
, но безуспешно. Я обнаружил, что единственное полезное решение - это установка формата в начале разметки бритвы.
@{Utils.SetCCDateFormat();}
Есть ли способ изменить CurrentCulture, чтобы он стал постоянным в схеме блейзора?
Является ли наблюдаемое поведение правильным или это ошибка?
Редактировать
То, что я нашел до сих пор
Можно установить свойства культуры (CultureInfo.CurrentCulture
) в промежуточном программном обеспечении * За 1046 * до создается конечная точка блейзера, и изменения сохраняются в течение всего срока службы цепи. Когда мы модифицируем CurrentCulture
в методах жизненного цикла компонентов, изменение носит временный характер (до конца метода).
Мое понимание проблемы:
- Когда создается цепь где-то хранится текущая культура
- Сервер имеет ограниченное количество потоков
- При необходимости поток назначается в цепь, а текущая культура задается тем, что было сохранено в начале
- Можно изменить
CurrentCulture
, но это не влияет на хранилище настроек, поэтому при вызове другого метода события (другого потока) используется оригинальная культура.
Таким образом, кажется, что вопрос: Как изменить настройки культуры схем, когда она уже создана?
Может быть, это невозможно, и это необходимо выполнить полную ссылку sh (снова запустить запрос с помощью навигации) и использовать промежуточное ПО для установки измененной культуры. Существование хранилища культур - только моя гипотеза, и у меня нет никаких ссылок, чтобы поддержать это.
Большое спасибо Tyeth и Ashiquzzaman за помощь, но я не принимаю их попытки как ответ.