2011-05-23 69 views
1

在我的模型,我有以下特性:.NET MVC3刪除貨幣符號和逗號

[DataType(DataType.Currency)] 
public decimal? Budget { get; set; } 

當用戶在$ 1,200.34,我需要一個值有效,並去掉了貨幣符號和逗號。

在我的控制器中我做:

if (race.Budget != null) 
{ 
    race.Budget.ToString().Replace("$", "").Replace(",", ""); 
} 

的問題是,客戶端驗證未通過價值預算到控制器。我得到一個null值。我如何覆蓋客戶端驗證,以便我可以去掉貨幣符號和逗號?

非常感謝您的幫助。

UPDATE

因此,這裏的奇怪的事情。假設我想繞過客戶端驗證。我將@{ Html.EnableClientValidation(false); }添加到了我的視圖中,並且在向控制器提交時仍然會爲預算髮送空值。

回答

5

This不是客戶端驗證問題。你的模型有一個十進制類型的字段?模型聯編程序會嘗試綁定一個價值$ 123,456.78的值並失敗,因此該值將爲空。下面就來解決這個問題的一種方法:

更改模型有掩蓋你的十進制的字符串屬性:

public decimal? Budget { get; set; } 
public string BudgetText { 
    get { 
     return Budget.HasValue ? Budget.ToString("$") : string.Empty; 
    } 
    set { 
     // parse "value" and try to put it into Budget 
    } 
} 

然後,只是從你的視圖綁定到BudgetText。將其驗證爲只接受貨幣輸入的正則表達式的字符串。它可能會是相同的正則表達式,你可以用你的BudgetTextset的方法

+0

不包括$,但用逗號,它不會是一個客戶端驗證錯誤,如果不考慮適當的文化,因此jquery驗證本地化文件? – 2011-05-23 20:32:50

+0

好,爲了測試我在說什麼,只需將jQuery從圖片中取出即可。只需發佈一個表格,如'

'直接發送到您的控制器。如果你輸入類似1232.53的東西,它可以工作,但是1,232.53美元不會。 – Milimetric 2011-05-24 01:01:29

+0

ya ..但是由於客戶端驗證需要記住,因此您無法完全將其從圖片中刪除。我認爲只要貨幣符號可以被刪除..一切都會好的,否則我發佈的其他選項可以與貨幣符號一起使用,但您的觀點可能不得不在綁定中刪除。 – 2011-05-24 02:19:29

1

因此,您可能需要掛鉤某些JQuery來預處理表單字段以將不需要的字符(表單提交到服務器之前)去除。這可能是最快,最骯髒的方法。

對於可重複使用的東西,看看custom client validationadapters。鏈接不是現貨,但應該讓你朝正確的方向發展。對於布拉德的截屏,我相信相關部分相當早。