2016-12-06 108 views
0

在我的asp.net mvc4应用程序中我使用MVVM和ajax(使用json数据类型)将数值(德文数字小数点分隔符:例如17,3)从服务器的视图(客户端)。我通过查看相应的sql数据库表字段中的条目来检查结果。数值被正确存储(17,3)。到现在为止还挺好。 当我再次检索到视图中的值时,它会显示一个英文小数点分隔符(17.3)。将此条目保存到服务器将导致sql数据库表中的NULL条目。 当我手动输入值17.3到视图中并将条目保存到服务器时,这也会导致sql数据库表中的NULL条目。MVVM从服务器到客户端的数值数据没有正确传输

在模型和视图模型中,数字条目的属性被定义为double。在视图中我使用@ Html.TextBoxFor(....)

任何建议是什么导致这种情况,以及如何解决这个问题?

感谢和问候,马努

+1

这听起来像你有一个数据库的文化与用户界面的文化不匹配。 – ChrisF

+0

在web.config中。我有:<全球化uiCulture =“de”culture =“de-AT”>。我认为应该这样做。 – Manu

+0

@Manu我编辑了我的答案 – rbr94

回答

1

在DAL /传输层中的所有值应该使用CultureInfo.InvariantCulture用于传输和数据的存储。

当您显示这些值时,请引入适当的CultureInfo以转换为和从文化特定的数据呈现。

+0

我在哪里以及如何完成我的数字属性(让我们称之为'NumAmount')是InvariantCulture类型?在模型中,我将它定义为double?在modelView中它也是一个双精度型。所以我认为它一定是在发布ajax调用或者控制器从服务器获取数据的地方,对吧?但我不知道如何使'DAL /传输层使用CultureInfo.InvariantCulture ...'。 – Manu

+0

在DAL /传输层中,如果您正在进行大量字符串数字/日期转换,通常只是一个问题。您需要查看的区域是从前端到模型的转换,即将适当的CultureInfo传递到Html.TextBoxFor。 – toadflakz

1

尝试将数据库的输出格式化为德国文化。样本:

var yourValue = 20.3; 

var cultureInfo = new CultureInfo("de-DE"); 

var formattedValue = yourValue.ToString("F1", cultureInfo); 

//formattedValue => 20,3; 

编辑1:

根据您的问题编辑我提出以下几点建议:

您可以使用

@{var formated = String.Format("{0:0.0}", yourValue);} 
@Html.TextBoxFor(m => yourValue, formated, new { id = "yourId"}) 
+0

添加var cultureInfo = new CultureInfo(“de-DE”);进入页面的脚本部分? – Manu

+0

@Manu你也可以尝试'Html.TextBox(“abc”,yourValue.ToString(“F1”,new CultureInfo(“de-DE”)));'。如果我的回答很有用,请注册 – rbr94

+0

@Manu它能解决您的问题吗? – rbr94

相关问题