【发布时间】:2015-03-31 05:59:32
【问题描述】:
我有一个带有一个小数属性的简单模型:
public class Model {
public decimal Quantity { get;set; }
}
在我看来,我有:
@Html.TextBoxFor(m => m.Quantity)
@Html.ValidationMessageFor(m => m.Quantity)
问题是,当我尝试使用小数部分(如 1.5、2.5 等)发布值时,我会在客户端或服务器端收到验证错误,具体取决于我使用的 NumberDecimalSeparator。如果我发布1,5 我得到客户端验证错误(数据验证编号一),或者如果我发布1.5 我得到服务器端模型验证错误 - "The value '1.5' is not valid for Quantity."。我尝试在 Global.asax 中的 Application_Start() 上手动设置 NumberDecimalSeparator,但没有帮助。
var currentCulture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
currentCulture.NumberFormat.NumberDecimalSeparator = ".";
Thread.CurrentThread.CurrentCulture = currentCulture;
Thread.CurrentThread.CurrentUICulture = currentCulture;
当我手动将一些值添加到数据库并尝试编辑它们时,TextBox 中的值显示为带有点 ".",但是当我尝试使用点保存另一个值时,我得到服务器端验证错误。可能是什么原因?为什么手动文化信息更新不起作用?
// 编辑:
我更改currentCulture.NumberFormat.NumberDecimalSeparator 的方法有效,但前提是我每次都在Application_BeginRequest() 上这样做:
protected override void Application_BeginRequest(object sender, System.EventArgs e)
{
var currentCulture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
currentCulture.NumberFormat.NumberDecimalSeparator = ".";
currentCulture.NumberFormat.NumberGroupSeparator = " ";
currentCulture.NumberFormat.CurrencyDecimalSeparator = ".";
Thread.CurrentThread.CurrentCulture = currentCulture;
Thread.CurrentThread.CurrentUICulture = currentCulture;
base.Application_BeginRequest(sender, e);
}
为什么它在应用程序启动时不起作用?
【问题讨论】:
-
服务器的文化是什么?如果它接受小数点分隔符作为逗号,那么您可以修改 jquery.validator 以接受小数点分隔符作为逗号(默认情况下它是一个点)
-
@StephenMuecke,服务器的文化是
culture="ru" uiCulture="ru-RU"我也想使用点作为小数点分隔符,默认情况下。 -
如果你改变文化(比如
en-US)会起作用吗? -
@StephenMuecke,是的,确实如此。在这种情况下,点是客户端和服务器端验证器的有效分隔符。
-
尝试将用于设置文化的代码放在
Application_AcquireRequestState而不是Application_Start
标签: c# asp.net-mvc validation decimal-point