2012-03-13 116 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 
    } 
} 
相關問題