我目前正在为合同创建表单,其中一个字段用于折扣%,并且已在实体框架中声明为十进制。 当我在那里输入一个值并保存它时,我遇到了一个问题。
代码快速概述:
EF:tblContract - >回扣是一个十进制字段。
创建/编辑视图:
<%: Html.TextBoxFor(model => model.Rebate, new { @class="form-txt-normal" }) %>
我尝试过以不同方式输入数字。
75:当我给它一些可以解析成int的东西时,它会在字段中保存正确的值(奇怪的是,当显示之后,没有显示小数点,只有75)。
75.25:我观察了传递给[HttpPost] Edit方法的值(与Create相同)。输入十进制值时,该变量为null。我的输出屏幕显示我发生了异常:
A first chance exception of type 'System.Linq.Dynamic.ParseException' occurred in ContractManagementTool.DLL
我还试过75,25来排除关于小数点/逗号应该是什么的文化设置,但是同样的问题也出现了。 我有几个包含整数的其他字段,它们以完全相同的方式处理,唯一的区别是实体框架将它们称为Int32,而不是Decimal。 Int32全部工作,Decimal没有。
我在这里遗漏了什么吗? MVC不能与Decimals一起使用,因为它与int一起工作吗?
进一步更新:
我有一部分工作。我没有改变代码(除了一些jQuery,我会解释)。
当我输入75,25时,Rebate变量被正确传递给方法(这是有道理的,因为我在比利时,我们使用,十进制中断:))我添加了一些jQuery来替换。当用户输入数据时,使其更容易。
当我发布变量时,十进制回扣的值为75.25(现在EF接管其小数点)。 Rebate已经在我传递给该方法的tblContract实体中。我执行db.ApplyCurrentValues(foo);
现在这里是妙语:在我的数据库中,保存了值75。没有小数点,没有。所以我现在可以正确地将它传递给我的方法,但我无法将其保存在数据库中。
最终更新:
我解决了。对于那些对答案充满好奇的人:如果你没有指定小数点,它就是0.我似乎记得EF的标准是2,但我可能会弄错。
答案 0 :(得分:1)
找到它。实体框架将我的小数舍入设置为整数(1.0)。 更改了标准设置,问题解决了:)