Я разрабатывает 5 приложения ASP .NET MVC в Visual Studio 2015. У меня есть простая модель, созданную:ASP .NET MVC 5 - десятичные всегда ноль в контроллере
public class Article
{
public int Id { get; set; }
public string Name { get; set; }
public string Code { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
}
и стандарт, Visual Studio - контроллер и вид. Конечно, у меня проблема с ценовым десятичным полем. При попытке добавить/отредактировать существующую статью, когда я введу десятичное число, например, 5,45
Я получил ошибку проверки The field Price must be a number.
. Если я наберу его как 5.45
, я не получу эту ошибку, однако после отправки формы в мой контроллер Price
свойство статьи равно 0. Я исследовал в Интернете и форумах и в соответствии с this post's answer создал модель связующего для десятичных знаков, как:
public class DecimalModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
return valueProviderResult == null ? base.BindModel(controllerContext, bindingContext) : Convert.ToDecimal(valueProviderResult.AttemptedValue);
}
}
, а затем в моем Global.asax.cs
файле я положил две строки, чтобы добавить это связующее вещество для decimals
:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
FluentValidationModelValidatorProvider.Configure();
ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
ModelBinders.Binders.Add(typeof(decimal?), new DecimalModelBinder());
}
Тем не менее, у меня все еще есть те же проблемы, ничего не изменилось.
Я также пытался принудить культуру моего компьютера, поставив следующий фрагмент кода в моей Web.config
файл (в соответствии с рекомендациями в this tutorial):
<system.web>
<globalization culture ="en-US" />
<!--elements removed for clarity-->
, но все это время тот же вопрос: ( Можете ли вы мне помочь? Я полагаю, что у меня что-то не хватает, но я уже 10 раз принимал все возможные решения, и это все равно ...
Спасибо заранее!
Убедитесь 'bindingContext.ValueProvider.GetValue' это вернуть десятичного не целое число. – Mehmood
Странно, что если я поставил точку останова в моем методе BindModel в DecimalModelBinder и перешел на веб-страницу, пытаясь отредактировать или добавить новую статью с заполненной ценой, этот код никогда не будет выполнен ... Поэтому я думаю, что есть проблема с добавлением этого Binder к связующим по умолчанию ... но я понятия не имею, что это может быть. – DawidSibinski
Я думаю, вы не прочли свой ответ (из вашей общей ссылки). Msgstr " – Mehmood