提问人:Scott 提问时间:3/13/2012 更新时间:8/13/2012 访问量:4222
MVC3 不显眼的 jquery 验证 data-val-number
MVC3 unobtrusive jquery validation data-val-number
问:
真正挣扎于 MVC3 设置的内置不显眼的 jquery 验证。
我的对象具有如下属性:
[DisplayName("GP")]
[DataType(DataType.Currency)]
[DisplayFormat(NullDisplayText = "$0", DataFormatString = "{0:C0}", ApplyFormatInEditMode = true)]
[Column("gross_profit")]
public decimal? GrossProfit { get; set; }
EditorFor 制作了一个文本框,这很好,但是验证失败,因为我希望用户能够输入货币前缀......例如:$48,000..客户端验证失败,指出该属性不是数字。
我编写自己的数据注释和自定义模型绑定没有问题,但我无法弄清楚如何阻止 MVC 自动将该“data-val-number”放入文本输入中,因为它是十进制类型。
我相信“data-val-number”正在阻止jquery不显眼的验证通过,因为输入字段包含一个美元符号,也许还有一个逗号。
因此,我不是在寻找任何全球化技巧,而是一种允许用户输入“$48,000”之类的文本并进行此通过验证的方法......
我也想对百分比值采用相同的方法......例如“25%”
答:
1赞
VulgarBinary
8/13/2012
#1
您不希望在属性中使用非数字值进行显示。有几种方法可以处理此问题,但 MVC 中的默认模型绑定器将始终尝试将 ######.## 显式映射到十进制字段。如果你有辅助输入,比如$##,###.##,它会爆炸,因为它不能直接转换为十进制值。decimal?
您有 2 种解决方案,第一种是使用输入掩码,例如:
http://www.xaprb.com/html-input-mask/html-form-input-mask.html
或
http://digitalbush.com/projects/masked-input-plugin/
它仅调整输入的 UI 显示。
或者,您可以使用与字符串数据类型相同的模型中的逻辑。
[DisplayName("GP")]
[DataType(DataType.Currency)]
[DisplayFormat(NullDisplayText = "$0", DataFormatString = "{0:C0}", ApplyFormatInEditMode = true)]
[Column("gross_profit")]
public string CurrencyDisplay { get; set; }
public decimal? CurrencyInput
{
get
{
//parse out non-int fields to return from value in CurrencyDisplay
}
set
{
//format string and seed into CurrencyDisplay
}
}
评论