C# MVC FormCollection值解析为十进制,带小数点的句点分隔符

C# MVC FormCollection值解析为十进制,带小数点的句点分隔符,c#,model-view-controller,decimal,formcollection,C#,Model View Controller,Decimal,Formcollection,这次我正在开发一个小型MVC应用程序。在控制器中模型的更新部分,所有字段值都在控制器中传递。其中一个字段是十进制值。该值使用句点作为分隔符存储在数据库中。该字段名为ContractHours。40存储为40.00。现在,在检索数据时,由于我的浏览器的语言设置,表单中的值显示为40,00(顺便说一句)。但当我尝试更新时,传递给formcollection的值当然也是40,00。但是当我尝试执行update语句时 update Employee set ContractHours = collect

这次我正在开发一个小型MVC应用程序。在控制器中模型的更新部分,所有字段值都在控制器中传递。其中一个字段是十进制值。该值使用句点作为分隔符存储在数据库中。该字段名为ContractHours。40存储为40.00。现在,在检索数据时,由于我的浏览器的语言设置,表单中的值显示为40,00(顺便说一句)。但当我尝试更新时,传递给formcollection的值当然也是40,00。但是当我尝试执行update语句时

update Employee set ContractHours = collection["ContractHours"] WHERE ID = 1
我得到一个异常,因为DB不接受40,00作为十进制值传递。因此,我尝试使用以下方法将值解析为十进制:

var ch = Decimal.Parse(collection["ContractHours"],CultureInfo.InvariantCulture)
甚至

var ch = Decimal.Parse(collection["ContractHours"], NumberStyles.Any, new CultureInfo("en-US"))
但这两条语句都将值40,00返回为4000

使用一个简单的替换就可以了,但感觉不太对劲

var ch = collection["ContractHours"].Replace(",",".");

我在谷歌上搜索了这个论坛,寻找一个解决方案,但我找不到任何解决方案。那么,在不改变浏览器语言设置的情况下,解决这个问题的正确方法是什么呢?

今天,我联系了一位帮助我解决这个问题的人

结果我用了:

var ch = Decimal.Parse(collection["ContractHours"], NumberStyles.Any,new CultureInfo("nl-NL"));
给了我ch var的正确值,在本例中为40.00

然而,另一个问题出现了,这不是原始问题的一部分,但我想我还是会分享它

我在查询字符串中使用了ch变量,如下所示:

string sqlQuery = $"update Employee set Name ='{collection["name"]}' , Email = ' {collection["email"]}'," +
                    $"ContractHours={ch},IsActive={(collection["IsActive"].ToString().Contains("true") ? 1 : 0)} " +
                    $"WHERE ID={id}";
当我试图执行这个字符串时,抛出了一个异常。结果表明,在查询字符串中使用ch时,其值再次为40,00。我被告知这是由var ch转换为字符串引起的,当这种情况发生时,将使用用作集合区域性的值。在本例中,nl nl导致ch的值在SQL查询中用于字符串时变回40,00

我们所做的是在applicationon_OnStart()中的MVC.NET Framework应用程序的global.asx.cs中添加下一行

然后将sql查询更改为:

string sqlQuery = $"update Employee set Name ='{collection["name"]}' , Email = ' {collection["email"]}'," +
                    $"ContractHours={collection["ContractHours"]},IsActive={(collection["IsActive"].ToString().Contains("true") ? 1 : 0)} " +
                    $"WHERE ID={id}";
不再需要var ch了。我知道答案比我要求的要多,但我只是添加了这些信息,以澄清问题,我希望其他人能从中受益

string sqlQuery = $"update Employee set Name ='{collection["name"]}' , Email = ' {collection["email"]}'," +
                    $"ContractHours={collection["ContractHours"]},IsActive={(collection["IsActive"].ToString().Contains("true") ? 1 : 0)} " +
                    $"WHERE ID={id}";