【问题标题】:MVC3 unobtrusive jquery validation data-val-numberMVC3 不显眼的 jquery 验证数据-val-number
【发布时间】:2012-03-29 22:37:57
【问题描述】:

在 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%”

【问题讨论】:

    标签: jquery asp.net-mvc-3 html unobtrusive-javascript


    【解决方案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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-16
      • 2012-04-13
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      相关资源
      最近更新 更多