【发布时间】:2018-01-28 20:43:37
【问题描述】:
我遇到了很多人已经遇到的同样问题 - Model Binder 不接受本地化的十进制输入。在所有主题、此处和其他论坛中,推荐的解决方案是实现自定义ModelBinder。
我的问题是这些解决方案对我不起作用。让我们以这个解决方案为例:comma decimal seperator in asp.net mvc 5
当我引用所有命名空间时,仍然存在两个错误:
错误 CS0115 'DecimalModelBinder.BindModel(ControllerContext, ModelBindingContext)': 找不到合适的方法来覆盖 ...
和
错误 CS0173 无法确定条件表达式的类型 因为 'bool' 和 'decimal' 之间没有隐式转换
第二个引用整个return 语句。
MVC 框架中是否发生了一些变化,所以这段代码已经过时了,还是我做错了什么?
我最终得到的代码是:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.ModelBinding;
using System.Web.Mvc;
namespace AetMuzickaOprema.App_Start
{
public class DecimalModelBinder : System.Web.ModelBinding.DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, System.Web.ModelBinding.ModelBindingContext bindingContext) //first error
{
var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
return valueProviderResult == null ? base.BindModel(controllerContext, bindingContext) : Convert.ToDecimal(valueProviderResult.AttemptedValue); //second error
}
}
}
有问题的模型属性:
[Required]
[Range(typeof(decimal), "0", "999999999")]
public decimal Price { get; set; }
【问题讨论】:
-
这里解释了如何以更新的方式进行自定义模型绑定。 docs.microsoft.com/en-us/aspnet/core/mvc/advanced/… 。如果您有问题,我会为您构建,但请先尝试。
-
谢谢,我会尝试并告诉你:) 非常感谢
-
@PedroSouki 自从您发表评论以来,我一直在看这篇文章,但我对 MVC 太陌生,无法在我的情况下使用它。如果您愿意向我展示如何实现它以使十进制值同时接受“1,25”和“1.25”,我将不胜感激。
标签: c# .net asp.net-mvc asp.net-mvc-5 model-binding