2015-09-27 3 views
2

Я использую MVC 5.0
Я поставил культуру в конфигурации:Ошибка десятичного символа в MVC, C#?

<system.web> 
    <globalization uiCulture="fa-IR" culture="fa-IR" /> 
</system.web> 

У меня есть модель, как следующее:

public class MyModel 
{ 
    [DisplayName("NbatPersent")] 
    [Range(0, 100)] 
    public double NbatPersent{ get; set; } 
} 

MVC показывает значение NbatPersent в View, как и когда 22/5 Я хочу отправить форму для проверки формы оповещения меня The field NbatPersent must be a number.. Он не может преобразовать 22/5 в 22.5
Это будет хорошо, если я введу 22.5, но если свойство имеет значение его преобразование . в /

Как я могу преобразовать культуру всех числовых свойств для en-US, чтобы показать значение как 22.5 нет подобный 22/5.

Edit:
Я использую @Html.TextBoxFor показать десятичные свойства из-за пользователем следует изменить.

+0

попробовать это '@ Html.DisplayFor (x => x.NbatPersent, string.Format ("{0: 0.00}")); ' –

+1

У вас включена проверка на стороне клиента. Если это так, это результат 'jquery.validation.js'. Вы можете использовать 'jquery.globalize.js', чтобы решить эту проблему. И нет смысла менять '22/5' на' 22.5', потому что тогда он будет терпеть неудачу на сервере при отправке формы, если вы не используете пользовательский 'ModelBinder' –

+0

@StephenMuecke. Как мы должны использовать' jquery.globalize.js' , –

ответ

3

Вы получаете ошибку проверки на стороне клиента, в результате jquery.validate.js, который использует следующее для проверки значения (которое допускает только символ . как десятичный разделитель.

number: function(value, element) { 
    return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value); 
}, 

Вы можете использовать jquery.validate.globalize.js плагин (см this article более подробно), или вы можете добавить свой собственный сценарий, чтобы изменить валидатор, например (включить это после jquery.validate.js)

$.validator.methods.number = function (value, element) { 
    return this.optional(element) || $.isNumeric($(element).val().replace('/', '.')); 
} 
+0

. Замечание: возможно, было бы лучше заменить' $ .isNumeric (...) bit' с правильным регулярным выражением. Для последней части будет '(?:/\ D +)', но я не знаю, что такое разделитель тысяч для фарси, поэтому не уверен, что '(?:, \ D {3}) +)' должно быть (то есть, что использовать вместо ',') –

+0

Спасибо, но я получаю 'Uncaught TypeError: Globalize.culture не является ошибкой функции –

+0

Используете ли вы плагин, а не скрипт в ответе? –

2

Попробуйте установить формат просмотра явно

@Html.DisplayFor(x => string.Format("{0:0.00}", x.NbatPersent)); 

еще можно написать пользовательский шаблон редактор для двойного типа (~/Views/Shared/EditorTemplates/double.cshtml):

@model double? 
@Html.TextBox("", Model.HasValue ? Model.Value.ToString("#,##0.000#") : "") 

, а затем на ваш взгляд:

@Html.EditorFor(x => x.NbatPersent) 
+0

Я использую '@ Html.TextBoxFor', чтобы показать свойство decimal, потому что пользователь должен его изменить. –

+0

Я думаю, что это не совсем правильно, я думаю, мы должны изменить привязку MVC, чтобы исправить эту проблему во всех приложениях, не меняя помощников. Не так ли? –

+0

@MohammadDayyan, что и все зависит от ваших требований .... Используя атрибут, вы можете это сделать ...... [DisplayFormat (DataFormatString = "{0: #, ## 0.000 #}", ApplyFormatInEditMode = true)] общественный двойной? NbatPersent {get; задавать; } –

Смежные вопросы