我有一个简单的TextBoxFor
,我在小数点上使用它。我的小数在我的viewmodel中被简单地定义为:
[DisplayName("Beløb")]
public decimal Amount { get; set; }
我在我的表单中使用它,使用:
<div class="form-group row">
@Html.LabelFor(c => c.Amount, new { @class = "col-lg-3 control-label text-lg-right pt-2" })
<div class="col-lg-6">
@Html.TextBoxFor(c => c.Amount, new { @class = "form-control" })
@Html.ValidationMessageFor(c => c.Amount)
</div>
</div>
现在,在我的web.config中,我在system.web
下设置了全球化:
<globalization culture="da-DK" uiCulture="da-DK" />
我的问题如下:
以下是我们如何在丹麦写一个数字:
500,50&lt; - 五百五十美分
如果我将此POST发送到服务器,则会忽略逗号,并且我的控制器会收到50050。
我在这里做错了什么?我认为web.config就足够了。
答案 0 :(得分:0)
原来这是一个错误,StackOverflow上没有人能够修复,因为我没有提供完整的图片。我将在这里留下答案,以防万一其他人谷歌这个,这只是在绝望的时候再看一个地方。
错误发生在我的Global.asax中。我为小数设置了两个模型绑定器:
ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());
ModelBinders.Binders.Add(typeof(decimal?), new DecimalModelBinder());
我的代码是:
public class DecimalModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (valueProviderResult.AttemptedValue.Equals("N.aN") ||
valueProviderResult.AttemptedValue.Equals("NaN") ||
valueProviderResult.AttemptedValue.Equals("Infini.ty") ||
valueProviderResult.AttemptedValue.Equals("Infinity") ||
string.IsNullOrEmpty(valueProviderResult.AttemptedValue))
{
return 0m;
}
try
{
return Convert.ToDecimal(valueProviderResult.AttemptedValue, new CultureInfo("en-US"));
}
catch (Exception)
{
return 0m;
}
}
}
解决这个问题之后,它才起作用。明显。我是个白痴;)