2011-05-23 45 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。链接不是现货,但应该让你朝正确的方向发展。对于布拉德的截屏,我相信相关部分相当早。