请帮忙解决这个问题。我没有找到解决方案。
我构建了一个允许输入一些数据的WebForm(来自多个控件,一个TextBox包含一个表示数量的数字)。 WebForm在ASP.NET 4.0中(带有C#)。
WebForm将控件中的所有值传递到SQL Server 2014版本上托管的数据库中。问题出现了:Web应用程序应该在德语环境中运行。 (我的机器和其他将访问应用程序的人)。
我的问题是即使区域设置设置为德语,我仍然必须输入带有“。”的小数值。小数点,而不是在文本框中用“,”逗号表示数量。
如果我用逗号输入小数值,它们会粘在一起 整数,而不是小数。例如11123,34记录在 表1112324 1123.45在表中记录为1123,45
注意:我在数据库中设置了字段,此TextBox在SQL表定义中的地址为“Money”类型。
通过GridView访问表格内容(如书面内容) 控制在另一个webform中,我用“,”逗号获取所有值, 无论区域设置是否设置为德语或英语。
为数量存储的数值格式将其显示从“,”逗号更改为“。”只有在SQL Server上直接在表上运行SELECT时(我的意思是在SQL Server Management Studio中),或者当我在SQL Server上“设置语言到德语/英语”时,才会出现反对意见。
我的问题是:
我不希望用户使用“。”的小数分隔符。进入时 数量,并在阅读时使用小数分隔符“,” 数量超出数据库。
非常感谢你的帮助。
答案 0 :(得分:0)
正确的解决方案:将值转换为文本并返回的每个操作都必须适当地指定文化。
// formatting/parsing
var userCuluture = new CultureInfo("de-de");
textBox.Text = String.Format(userCuluture, "{0} for {1}", DateTime.Now, 1.99);
var value = float.Parse(textBoxAmount.Text, userCulture);
dbProvider.WriteValue(value); // use InvariantCulture inside for formating
穷人版本:更改线程的文化,因此默认文化用于转换并进行调整,以便在用户文化设置为当前时完成对用户数据的操作,并在InvariantCulture
时完成数据库操作:
// Manipulation of user's data to use "userCulutre" rules
Thread.CurrentThread.CurrentCulture = userCulture;
textBox.Text = String.Format("{0} for {1}", DateTime.Now, 1.99);
var value = float.Parse(textBoxAmount.Text);
// DB/file manipulations to use Invariant rules
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
dbProvider.WriteValue(value); // use current culture for formatting/parsing
您可以通过https://www.bing.com/search?q=asp.net+culture找到管理当前文化的方法,例如Set Culture in an ASP.Net MVC app