在我的模型中,我有以下属性:
[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发送空值。
答案 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