我有一个实体:
public class Book
{
public int BookID{get; set;}
public string BookName{get; set;}
public int Price {get; set;}
}
我自行搭建并创建了Controller和Views。然后我将我的实体改为:
public class Book
{
public int BookID{get; set;}
public string BookName{get; set;}
public double Price {get; set;}
}
我复制了我的项目,然后删除了控制器和视图,并自动重新创建它们。然后复制旧控制器和视图的内容。现在,当我输入18.75时,我得到了" 18.75'对价格无效。"错误。我该如何解决这种情况?感谢。
答案 0 :(得分:1)
如果服务器上的文化使用逗号处理十进制数,您还需要告诉jQuery验证它应该使用逗号作为十进制分隔符。您可以查看this blog-post(有点旧,但有些东西仍然可以使用),以获得处理文化的一般方法。这里的代码具有魔力:
$(document).ready(function () {
//Ask ASP.NET what culture we prefer, because we stuck it in a meta tag
var data = $("meta[name='accept-language']").attr("content")
//Tell jQuery to figure it out also on the client side.
$.global.preferCulture(data);
//Tell the validator, for example,
// that we want numbers parsed a certain way!
$.validator.methods.number = function (value, element) {
if ($.global.parseFloat(value)) {
return true;
}
return false;
}
});
请注意,jQuery全球化插件的链接已经失效。 It has been moved
基本上你必须覆盖默认的数字验证。我知道这很糟糕但我必须找到一个像这个一样干净的方法。
答案 1 :(得分:1)
总之。我在此期间通过使用我自己的十进制处理程序处理十进制输入(大部分)独立于区域设置来避免这种情况:
:
ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
新类DecimalModelBinder:
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 = GeneralHelper.ToDecimal(valueResult.AttemptedValue);
}
catch (FormatException e)
{
modelState.Errors.Add(e);
}
bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
return actualValue;
}
}
函数GeneralHelper.ToDecimal()
基于以下博客条目:https://sreindl.wordpress.com/2013/10/26/i18n-parsing-decimal-values/