2012-03-13 115 views
3

真的很苦恼与MVC3设置内置不显眼的jquery验证。MVC3不显眼的jquery验证数据-val-number

我的对象有一个属性,如:因为我希望用户能够进入货币前缀

[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传递验证,因为输入字段包含美元符号,也可能是逗号。

所以我不会找任何全球化的技巧,而是一种方式,让用户输入文本,如“48000 $”,并有这个通过验证...

我会想遵循比例相同的方法价值也...例如“25%”

回答

1

您不想在decimal?属性内使用非数字值进行显示。有几种方法可以解决这个问题,但MVC中的默认模型绑定器总是会试图将######。## ##映射到一个十进制字段。如果您有诸如$ ##,###。##这样的辅助输入,它将被炸毁,因为它不能被直接转换为十进制值。

你有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 
    } 
} 
相关问题