ASP.Net MVC十进制自定义编辑器模板 - 数据不保存

时间:2012-03-19 12:02:44

标签: asp.net-mvc ef-code-first decimal mvc-editor-templates

我的模型中有以下字段:

public Decimal AnnualSalary { get; set; }

在我的视图中显示为:

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

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

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

这为我提供了编辑器中现有数据所需的显示。但是,当我去保存修改后的数据时,它就失败了。如果我删除十进制编辑器模板,那么数据保存正常。

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

就好像客户端验证非常乐意接受千位分隔符,但是当EF代码首次尝试保存数据时服务器端的某些内容与千位分隔符不同。

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

3 个答案:

答案 0 :(得分:1)

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

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

编辑:可能就像这个问题的答案中描述的那样:Decimal values with thousand separator in Asp.Net MVC

答案 1 :(得分:0)

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

答案 2 :(得分:0)

感谢Michal B.提供的链接,我最终找到了this solution provided by Phil Haack的链接。

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