Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.Net MVC十进制自定义编辑器模板-数据未保存_Asp.net Mvc_Ef Code First_Decimal_Mvc Editor Templates - Fatal编程技术网

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

Asp.net mvc ASP.Net MVC十进制自定义编辑器模板-数据未保存,asp.net-mvc,ef-code-first,decimal,mvc-editor-templates,Asp.net Mvc,Ef Code First,Decimal,Mvc Editor Templates,我的模型中有以下字段: public Decimal AnnualSalary { get; set; } 在我的视图中显示为: @Html.EditorFor(model => model.SelectedPerson.AnnualSalary) 这给了我一个小数位为2的数据格式。我还想要一个逗号分隔符。因此,我在共享|编辑器模板文件夹中创建了一个名为Decimal.cshtml的文件,其中包含以下内容: @model Decimal @Html.TextBox("", Model.

我的模型中有以下字段:

public Decimal AnnualSalary { get; set; }
在我的视图中显示为:

@Html.EditorFor(model => model.SelectedPerson.AnnualSalary)
这给了我一个小数位为2的数据格式。我还想要一个逗号分隔符。因此,我在共享|编辑器模板文件夹中创建了一个名为Decimal.cshtml的文件,其中包含以下内容:

@model Decimal
@Html.TextBox("", Model.ToString("#,##0.00"))
这使我能够在编辑器中显示现有数据。但是,当我去保存修改后的数据时,它失败了。如果我删除了decimal编辑器模板,那么数据可以很好地保存

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

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


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

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

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


编辑:可能类似于此问题的答案中所述:

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

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


编辑:可能类似于此问题的答案中所述:

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

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

多亏了Michal B提供的链接。我最终找到了指向的链接


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

多亏了Michal B提供的链接。我最终找到了到的链接


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

为什么要在字符串中更改AnnualSalary并在操作中解析它,而不是保留为Decimal…验证仍然有效,并且不需要将Decimal解析为string?它将允许您以您接受的任何形式(regex)将其发送到服务器,并将消除现有的问题。感谢您在编辑中提供链接。这让我从Phil Haack那里找到了一个通用的解决方案,我在下面的回答中对此进行了详细说明。我真的无法将您的答案标记为正确,但我已对其进行了投票。为什么要更改字符串中的AnnualSalary并在操作中对其进行分析,而不是保留为Decimal…验证仍然有效,并且无需将Decimal解析为string?它将允许您以您接受的任何形式(regex)将其发送到服务器,并将消除现有的问题。感谢您在编辑中提供链接。这让我从Phil Haack那里找到了一个通用的解决方案,我在下面的回答中对此进行了详细说明。我无法真正将您的答案标记为正确,但我已对其进行了投票。或者如前一个答案所述,在viewmodel中用逗号传递薪资,然后将其转换为服务器端。或者如前一个答案所述,在viewmodel中用逗号传递薪资,然后将其转换为服务器端。