Какой язык используется при сопоставлении параметров с моделью? - PullRequest
2 голосов
/ 11 июня 2009

Я разместил десятичное значение формы в InvariantCulture (16.4) и был удивлен, что он не попал в модель в моей немецкой системе.

Мне пришлось использовать немецкий формат (16,4). Есть ли способ настроить язык, который используется для анализа параметров?

EDIT: После отладки в исходном коде найдены специфичные для языка части в ValueProviderDictionary

PopulateDictionary. Документация там гласит:

  1. Представление формы запроса (должно быть с учетом культурных особенностей)
  2. Значения из RouteData (могут быть из введенного URL или из значений по умолчанию для маршрута)
  3. Строка запроса URI

1. принимает CurrentCulture 2./3. взять инварианткультуру

Это не работает для меня: я не ожидал бы другого поведения в отношении использования Культуры, если бы я опубликовал значение или поместил его в строку запроса. Это может быть необходимо, если пользователь заполняет анализируемые значения вручную, но странно, если вы заполняете значения для списка. Я думаю, что идеальным решением было бы, если бы я мог переключаться между обеими версиями.

В любом случае мне нужно было найти способ установить CultureInfo.CurrentCulture перед вызовом PopulateDictionary. Вот как я это сделал:

        void Application_BeginRequest(object sender, EventArgs e)
    {
        Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

    }

Ответы [ 2 ]

3 голосов
/ 11 июня 2009

При разборе по умолчанию используется CurrentCulture. Однако все методы анализа принимают IFormatProvider (который может быть CultureInfo или, в зависимости от того, что вы анализируете, NumberFormatInfo или DateTimeFormatInfo). Вы должны использовать InvariantCulture для этого сценария (все, что в бэкэнде не отображается пользователю, должно использовать InvariantCulture.)

0 голосов
/ 11 июня 2009

Это решило проблему. Но будьте осторожны: если пользователь вводит значения в своем локальном формате, он не будет анализироваться. Это вряд ли произойдет в моем приложении. Надеюсь, что используемые мной компоненты пользовательского интерфейса позволят использовать другую культуру для отображения и публикации значений.

    void Application_BeginRequest(object sender, EventArgs e)
    {
        Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

    }
...