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

时间:2011-05-23 17:20:04

标签: asp.net-mvc-3

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

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

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

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

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

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

提前感谢您的帮助。

更新

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

3 个答案:

答案 0 :(得分: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
    }
}

然后,只需从View中绑定BudgetText即可。将其验证为具有仅接受货币输入的正则表达式的字符串。它可能与您BudgetText的{​​{1}}方法使用的正则表达式相同

答案 1 :(得分:1)

所以你可以挂钩一些JQuery来预处理表单字段以去掉你不想要的字符(在表单提交到服务器之前)。这可能是最快,最脏的方法。

对于可重复使用的内容,请查看custom client validation adapters。链接不是现场,但应该让你朝着正确的方向。对于Brad的截屏视频,我相信相关部分还很早。

答案 2 :(得分:0)

查看对jQuery本地化的支持

cliente validation using jQuery validate for currency fields

还有一个用于货币验证的插件

http://code.google.com/p/jquery-formatcurrency/

查看这篇最近的帖子以及$ in绑定 .NET MVC 3 Custom Decimal? Model Binder