【发布时间】:2015-11-14 16:33:06
【问题描述】:
我正在 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());
}
但是,我仍然有同样的问题,没有任何改变。
我还尝试通过将以下 sn-p 放入我的 Web.config 文件(如 this tutorial 中的建议)来强化我的 PC 文化:
<system.web>
<globalization culture ="en-US" />
<!--elements removed for clarity-->
但始终是同一个问题:(。 你能帮我吗?我想我遗漏了一些东西,但我已经遵循了所有可能的解决方案 10 次,但它仍然是一样的......
提前谢谢你!
【问题讨论】:
-
确保
bindingContext.ValueProvider.GetValue它返回十进制而不是整数。 -
奇怪的是,如果我在 DecimalModelBinder 的 BindModel 方法中放置一个断点并转到网页尝试编辑或添加填充了 Price 属性的新文章,则此代码永远不会执行。 ..所以我想将这个活页夹添加到默认活页夹有问题......但我不知道这可能是什么。
-
我认为您还没有阅读他们的答案(来自您的共享链接)。 “您的值是 3,0,它不是有效的十进制类型值。它应该是 3.0,用点(.)替换“逗号(,)。”
-
我写的是Price我放了“5.45”,所以格式没问题,它使用点,而不是逗号,但是Price的值一直是0。
-
然后分享您的代码,您可以通过该代码将数据从视图发布到控制器或控制器以查看。
标签: c# .net asp.net-mvc asp.net-mvc-5 visual-studio-2015