Неверная десятичная проверка - PullRequest
0 голосов
/ 06 июня 2018

Я написал приложение с проверкой модели, но когда я пытаюсь ввести десятичные значения, я получаю

Значение '12 .12' недопустимо для цены.

[Required(ErrorMessage = "Price is required.")]
[Range(0, 9999.99)]
[DataType(DataType.Currency)]
public decimal Price { get; set; }

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

хорошо, поэтому я добавил в мои Startup.cs

services.Configure<RequestLocalizationOptions>(options =>
{
options.DefaultRequestCulture = new RequestCulture("en-US");
});

и

  app.UseRequestLocalization();

, и это сработало

0 голосов
/ 06 июня 2018

Я только что наткнулся на это снова через 2 года.Я думал, что ASP.NET MVC 5 решил эту проблему, но похоже, что это не так.Итак, здесь описывается, как решить проблему.

Создайте класс с именем DecimalModelBinder, как показано ниже, и добавьте его в корневой каталог вашего проекта, например:

using System;
using System.Globalization;
using System.Web.Mvc;

namespace YourNamespace
{   
    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;

            if(valueResult.AttemptedValue != string.Empty)
            {
                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.cs, используйте это в Application_Start() как это:

ModelBinders.Binders.Add(typeof(decimal?), new DecimalModelBinder());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...