ASP.NET MVC 3 - проверка клиента с денежным полем

Я следил за этим блогом здесь и здесь.

А у меня следующая проблема.

Одно поле в моей форме — это формат валюты из Бразилии. Я использую проверку на стороне клиента. Все отлично работает, кроме одной проблемы.

У меня есть 2 проверки:

[DisplayName("Taxa de adesão")]
[MoedaReal(ErrorMessage = "Taxa deve ser numérico")]        
[Required(ErrorMessage = "Taxa é obrigatório")]
public decimal ValorAdesao { get; set; }

Правило REQUIRED работает нормально, правило MoedaReal работает нормально. После того, как эти правила переданы нормально, срабатывает одно последнее правило:

  • Поле Taxa de adesão должно быть числом

Я уже пытался изменить web.config в этой строке:

<globalization culture="pt-br" uiCulture="pt-br" />

Мой принятый формат чисел:

1,00
11,00
111,00
1.111,00
11.111,00
111.111,00
1.111.111,00
1.111.111.111.111,00

Как я могу «обмануть» .NET, чтобы принять этот формат? Потому что вместо этого он ожидает формат DECIMAL.


person Ismael    schedule 03.02.2011    source источник


Ответы (1)


Вы не можете обмануть связующую модель по умолчанию. Он просто пытается преобразовать значение строки запроса в десятичное число, используя культуру, указанную в вашем файле web.config. Поэтому, поскольку вы также используете проверку клиента, может быть разница в культуре между клиентом и сервером. Например, браузер может быть настроен на использование en-US и сервера pt-BR, и тогда у вас могут возникнуть проблемы. Вы можете попробовать это:

<globalization culture="auto" uiCulture="auto" />

Это означает, что культура, используемая сервером, будет определяться клиентом. Если это не сработает, у вас есть несколько других возможностей:

  • Написать пользовательский связыватель модели
  • Используйте строку вместо десятичного числа, а затем выполните синтаксический анализ вручную.
person Darin Dimitrov    schedule 03.02.2011
comment
Использование строки решило всю проблему. Это не пришло мне в голову! Благодарность - person Ismael; 04.02.2011