我想允许用户插入这样的价格值:
12 12,34 12,3 (用逗号表示或用逗号表示,之后最多2位数字)
ViewModel类:
[DataType(DataType.Currency)]
[RegularExpression(@"^\d+.\d{0,2}$")]
public decimal Price { get; set; }
查看:
@Html.EditorFor(model => model.Price, new {htmlAttributes = new {@class = "form-control"}})
@Html.ValidationMessageFor(model => model.Price, "", new { @class = "validation-error" })
以上代码总是给我错误: “现场价格必须是一个数字” 我可以像12.56那样写,但点不是我想做的,因为在我的国家,逗号适用于货币价值。
到目前为止我尝试的是:
1)我添加了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 = Convert.ToDecimal(valueResult.AttemptedValue,
CultureInfo.CurrentCulture);
}
catch (FormatException e)
{
modelState.Errors.Add(e);
}
bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
return actualValue;
}
在Global.asax中,我在Application_Start方法中添加了:
ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
没用了!
2)在web.config中,我尝试使用不同的全局文化值,例如:
<globalization culture="en-US" uiCulture="en" />
'auto'值也没有帮助..
所以我通过谷歌在不同网站上找到的任何东西都没有帮助我:/