gpt4 book ai didi

asp.net-mvc - 接受逗号和点作为小数分隔符

转载 作者:行者123 更新时间:2023-12-03 11:34:27 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to set decimal separators in ASP.NET MVC controllers?

(4 个回答)


4年前关闭。




ASP.NET MVC 中的模型绑定(bind)很棒,但它遵循区域设置。在我的语言环境中,小数点分隔符是逗号 (','),但用户也使用点 ('.'),因为他们懒得切换布局。我希望在一个地方为所有人实现 decimal我的模型中的字段。

我应该为 decimal 实现我自己的值提供者(或事件模型绑定(bind)器)吗?输入或我错过了一些简单的方法来做到这一点?

最佳答案

感谢接受的答案,我最终得到了以下实现来处理浮点数、 double 和十进制。

public abstract class FloatingPointModelBinderBase<T> : DefaultModelBinder
{
protected abstract Func<string, IFormatProvider, T> ConvertFunc { get; }

public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (valueProviderResult == null) return base.BindModel(controllerContext, bindingContext);
try
{
return ConvertFunc.Invoke(valueProviderResult.AttemptedValue, CultureInfo.CurrentUICulture);
}
catch (FormatException)
{
// If format error then fallback to InvariantCulture instead of current UI culture
return ConvertFunc.Invoke(valueProviderResult.AttemptedValue, CultureInfo.InvariantCulture);
}
}
}

public class DecimalModelBinder : FloatingPointModelBinderBase<decimal>
{
protected override Func<string, IFormatProvider, decimal> ConvertFunc => Convert.ToDecimal;
}

public class DoubleModelBinder : FloatingPointModelBinderBase<double>
{
protected override Func<string, IFormatProvider, double> ConvertFunc => Convert.ToDouble;
}

public class SingleModelBinder : FloatingPointModelBinderBase<float>
{
protected override Func<string, IFormatProvider, float> ConvertFunc => Convert.ToSingle;
}

然后您只需将您的 ModelBinders 设置为 Application_Start方法
ModelBinders.Binders[typeof(float)] = new SingleModelBinder();
ModelBinders.Binders[typeof(double)] = new DoubleModelBinder();
ModelBinders.Binders[typeof(decimal)] = new DecimalModelBinder();

关于asp.net-mvc - 接受逗号和点作为小数分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14400643/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com