1

我的模型中有以下字段:

public Decimal AnnualSalary { get; set; }

在我看来显示为:

@Html.EditorFor(model => model.SelectedPerson.AnnualSalary)

这给了我一个小数点后 2 位的数据格式。我还想要一个逗号千位分隔符。所以我在 Shared | 中创建了一个名为 Decimal.cshtml 的文件。包含以下内容的编辑器模板文件夹:

@model Decimal
@Html.TextBox("", Model.ToString("#,##0.00"))

这为我提供了我想要在编辑器中显示现有数据的内容。但是,当我去保存修改后的数据时,它失败了。如果我删除十进制编辑器模板,那么数据保存得很好。

我还注意到,如果没有新的编辑器模板,如果我在此文本框中输入逗号,我不会收到客户端验证错误,但是我的数据仍然没有保存。

就好像客户端验证很乐意接受千位分隔符,但是当 EF 代码第一次尝试保存数据时,服务器端的某些东西不喜欢千位分隔符。

这似乎是一个相当普遍的要求,但我正在努力在任何地方找到明确的答案。

4

3 回答 3

1

我建议您创建一个 SelectedPersonViewModel,其中 AnnualSalary 是一个字符串,并将 RegexAttribute 放在其上方,并使用正确的正则表达式进行验证。

您还可以在内部解析提供的字符串并将其保存到十进制变量中,然后返回到您的模型(在发布后的操作中)

编辑:可能类似于对这个问题的回答中描述的内容:Asp.Net MVC 中带有千位分隔符的十进制值

于 2012-03-19T12:08:26.167 回答
0

感谢上面 Michal B. 提供的链接,我最终找到了Phil Haack 提供的该解决方案的链接。

我尝试了我关注的链接中提到的许多其他解决方案,但这是迄今为止我发现的最全面和最通用的解决方案。

于 2012-03-19T21:37:11.740 回答
0

该模型希望十进制值有效,EF 也是如此。您可以在隐藏字段中添加十进制值,然后显示一个带有逗号格式的年薪值的文本框。然后使用 jquery,您可以在文本框更新时绑定隐藏字段的值。这样,您将传递模型期望的十进制值。

于 2012-03-19T12:11:16.187 回答