所以,我试图使用Html.TextBoxFor帮助器在视图中显示我的模型中的变量。
@Html.TextBoxFor(model => model.Variable, "{0:C2}", new { needsFormatting = "true" })
正如您所看到的,我已正确格式化,但问题出现在我尝试提交表单时;它会因“'”而引发验证错误。和' $'格式中的字符。 (例如:$ 20,000.00)。
变量声明为小数?在视图模型中:public decimal? Variable { get; set; }
,除了小数的默认服务器端验证之外,我没有任何额外的验证检查?变量(根据框架)。我也在客户端使用JQuery。
我尝试过几件事:
OnBegin = "formatNumbers();",
,其中方法(至少我认为)会在进行验证检查之前删除这些不需要的字符。function formatNumbers(){
$("input[needsFormatting='true']").each(function () {
formattedNumber = $(this).val().replace(",","").replace("$", "");
$(this).val(formattedNumber);
});
}
但这会使验证检查失败并显示默认验证消息。在发送文本框字段值进行验证后,它似乎删除了这些字符。
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:C}")]
并尝试了解它只适用于Html.EditorFor帮助程序(我没有测试过,但在研究中发现)。我也不确定(但希望)在验证检查之前知道要删除额外的格式化字符(但是再次,没有测试,因为我想在可能的情况下使用textboxfor helper)。我的最后一个想法是,这是一个不受欢迎的最后努力,是从十进制更改视图模型变量数据类型?字符串并显式转换视图模型中两种不同数据类型之间的数字。这样,它将在视图中传递验证(因为它是一个字符串),然后执行string.replace方法,然后使用decimal.parse方法,以便将数据库保存为十进制。这似乎是一种破解方式,并且希望坚持足够长的时间来找到更好的解决方案!
因此,我在显示时可以使用哪些其他方法确保正确格式化,但仍然能够以小数形式填充和保存可编辑数据?模型变量。任何帮助或指导将不胜感激,并提前感谢您的任何帮助!