Разобрать десятичную в представлении модель - PullRequest
9 голосов
/ 09 августа 2011

Я занимаюсь разработкой сайта в ASP.NET MVC 3.

Свойство

[DisplayName("Cost"), DisplayFormat(DataFormatString = "{0:F2}", ApplyFormatInEditMode = true)]
public decimal Cost { get; set; }

Представление

@Html.EditorFor(x => x.Cost)

Представление отображает стоимость как 1000,00(например).Проблема в том, что проверка требует точки вместо запятой.Как я могу вывести 1000,00 вместо 1000,00?Или отменить проверку, чтобы принять запятую вместо точки?

Редактировать.Я установил глобализацию в своем файле web.config на sv-SE (Швеция).

Ответы [ 3 ]

11 голосов
/ 10 августа 2011

Для этого вам понадобится написать пользовательский механизм связывания моделей.

/// <summary>
/// http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx
/// </summary>
public class DecimalModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext,
        ModelBindingContext bindingContext)
    {
        ValueProviderResult valueResult = bindingContext.ValueProvider
            .GetValue(bindingContext.ModelName);
        ModelState modelState = new ModelState { Value = valueResult };
        object actualValue = null;
        try
        {
            actualValue = Convert.ToDecimal(valueResult.AttemptedValue,
                CultureInfo.CurrentCulture);
        }
        catch (FormatException e)
        {
            modelState.Errors.Add(e);
        }

        bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
        return actualValue;
    }
}

В своем файле Global.asax добавьте следующее в метод Application_Start

ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
3 голосов
/ 10 августа 2011

Проблема в разборе десятичного разделителя в моей стране тоже запятая:

Я нашел какой-то обходной путь не очень хороший:

http://rebuildall.umbraworks.net/2011/03/02/jQuery_validate_and_the_comma_decimal_separator

http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx

0 голосов
/ 09 августа 2011

Можете ли вы не просто изменить DataFormatString, чтобы он форматировал число, используя точку, например, {0: 0,00} или подобное?

...