DataType.Currency不显眼的验证不起作用

时间:2013-01-08 14:14:18

标签: c# jquery model-view-controller asp.net-mvc-4 data-annotations

此代码无效,任何人都可以帮助我吗?

型号:

    [Display(ResourceType = typeof(HeelpResources), Name = "AdViewModel_Price_Label")]
    [Required(ErrorMessageResourceName = "ErrorMsgRequiredField", ErrorMessageResourceType = typeof(HeelpResources))]
    [DataType(DataType.Currency, ErrorMessageResourceName = "ErrorMsgPriceFormat", ErrorMessageResourceType = typeof(HeelpResources))]
    public decimal Price { get; set; }

在客户端生成:

data-val-number="The field Preço: must be a number".

而不是资源“ErrorMsgPriceFormat”中的消息。

感谢。

1 个答案:

答案 0 :(得分:1)

我很确定你将要做的事情更多的是这些:

public string FormattedPrice { get; set; }

使用您提供的RegEx装饰它,以确保它们输入有效的货币值并将input绑定到该字段。

然后当你进入行动时,你会想要用Decimal.TryParse做这样的事情:

decimal result;
var success = decimal.TryParse(o.FormattedPrice, NumberStyles.AllowDecimalPoint, CultureInfo.DefaultThreadCurrentCulture, out result);

其中o是发布到操作的模型的实例。此外,由于您的文化原因,NumberStyles.AllowDecimalPoint应该像您的示例一样转换为,。我知道这有点倒退,但是考虑到这一点,在美国,小数点分隔符为.,因此对于您的文化,相同的枚举值会转换为,

如果它成功解析它,那么success将成立,您可以将result设置为o.Price