.NET MVC3删除货币符号和逗号

Mik*_*ike 1 asp.net-mvc-3

在我的模型中,我有以下属性:

 [DataType(DataType.Currency)]
 public decimal? Budget { get; set; }
Run Code Online (Sandbox Code Playgroud)

当用户输入$ 1,200.34时,我需要该值有效并删除货币符号和逗号.

在我的控制器中我正在做:

if (race.Budget != null)
{
   race.Budget.ToString().Replace("$", "").Replace(",", "");
}
Run Code Online (Sandbox Code Playgroud)

问题是客户端验证没有将预算值传递给控制器​​.我得到一个null值.如何覆盖客户端验证,以便我可以删除货币符号和逗号?

提前感谢您的帮助.

UPDATE

所以这是奇怪的事情.假设我想一起绕过客户端验证.我添加@{ Html.EnableClientValidation(false); }到我的视图中,当我提交给控制器时,它仍然为Budget发送一个空值.

Mil*_*ric 5

这不是客户端验证问题.你的模型有一个十进制类型的字段?模型绑定器将尝试将$ 123,456.78的值绑定到该值并失败,因此该值将为null.这是解决这个问题的一种方法:

将模型更改为具有掩盖小数的字符串属性:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,只需从View中绑定BudgetText即可.将其验证为具有仅接受货币输入的正则表达式的字符串.它可能是你可以用于你BudgetTextset方法的相同正则表达式

  • 我知道它必须在模型绑定器中.当我拿走客户端验证时,我注意到了它,你的回答支持了我的想法.我实际上在这里发现了一个十进制活页夹:http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx (2认同)