Asp.net mvc 4 Can';t将货币格式的文本框转换为十进制模型(MVC)
在我的应用程序中,我有一个文本框,其中包含将值转换为货币格式的javascript。这是强制性的,不可协商 即5.50美元变成5.50美元,-5.50美元变成5.50美元 当我尝试保存时,会出现验证错误,因为$5.50对于ViewModel无效Asp.net mvc 4 Can';t将货币格式的文本框转换为十进制模型(MVC),asp.net-mvc-4,razor,model-binding,Asp.net Mvc 4,Razor,Model Binding,在我的应用程序中,我有一个文本框,其中包含将值转换为货币格式的javascript。这是强制性的,不可协商 即5.50美元变成5.50美元,-5.50美元变成5.50美元 当我尝试保存时,会出现验证错误,因为$5.50对于ViewModel无效 //View file @Html.CustomEditorFor(m => m.CurrentTotal, "currency") //Controller file. First thing in the controller method
//View file
@Html.CustomEditorFor(m => m.CurrentTotal, "currency")
//Controller file. First thing in the controller method called
if (ModelState.IsValid)
{
//... not getting to this
}
//ViewModel file
[Display(Name = "Current Total:")]
public decimal CurrentTotal
{
get
{
return PropertyDictionary.GetDecimal("CurrentTotal", 0).Value;
}
set
{
PropertyDictionary.SetDecimal("CurrentTotal", value);
}
}
我想知道如何在文本框转到模型并导致ModelState无效之前将非数字排除“.”从文本框中删除
我再次继承了这个应用程序,并且正在学习,所以我感谢您的时间和耐心 打个电话,比如
double.Parse(currencyValue, NumberStyles.Currency);
正如本文所建议的那样。查看其他选项。我仍然不知道如何在MVC中实现这一点(尽管看起来我应该使用自定义模型绑定器),但我已经解决了这个问题
$(document).submit(function () {
$("input[type=text].currency").each
(
function () {
$(this).val($(this).val().toString().replace('(', '-').replace("$", '').replace(")", ''));
}
);
});
希望这对未来有帮助。你格式化的数字不再是一个数字,它是一个字符串…你应该考虑至少在客户端处理这两个不同的数据点。将十进制单独作为隐藏控件,将javascript转换为其他可见控件,然后使用javascript将其转换回十进制(结果在隐藏控件中),然后回发。有道理吗?有点。我正在考虑在发回之前转换它的JavaScript路径,这不会干扰用户,我相信这是可以接受的,但我想知道MVC通常是如何做到这一点的。我觉得这是很常见的,尤其是因为您可以在ViewModel文件中按照[DisplayFormat(ApplyFormatInEditMode=true,DataFormatString=“{0:c}”)]的思路来做一些事情,从而导致各种各样的匹配。解析将不起作用,因为它在转换之前已绑定到模型。我之前在ViewModel文件中做过这项工作,但它不起作用。