在EditorFor

时间:2016-12-29 17:05:39

标签: asp.net validation decimal

我想允许用户插入这样的价格值:

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'值也没有帮助..

所以我通过谷歌在不同网站上找到的任何东西都没有帮助我:/

0 个答案:

没有答案