gpt4 book ai didi

asp.net-mvc-3 - .NET MVC 3 自定义十进制?模型绑定(bind)器

转载 作者:行者123 更新时间:2023-12-02 14:09:59 25 4
gpt4 key购买 nike

在我的模型中,我有以下小数?属性:

public decimal? Budget { get; set; }

我意识到我需要一个小数的自定义模型绑定(bind)器,Haack 在以下链接中提供了它:http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx .

我修改了他的代码,以便如果传入的值确实包含货币符号和/或逗号,那么我会将其删除,然后尝试将其转换为小数。这是可行的,但由于我的属性是可为空的十进制类型,我也希望它不接受任何内容,并沿着其快乐的方式将空值插入到我的数据库中的该列中。现在它插入一个 0.00。我知道我的代码中遗漏了一些东西,但我的大脑卡住了。

这是 Binder 代码:

 public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
ModelState modelState = new ModelState { Value = valueResult };
object actualValue = null;
object newValue = null;
try
{
if (!string.IsNullOrEmpty(valueResult.AttemptedValue))
{
newValue = valueResult.AttemptedValue.Replace("$", "").Replace(",", "");
}

actualValue = Convert.ToDecimal(newValue, CultureInfo.CurrentCulture);
}
catch (FormatException e)
{
modelState.Errors.Add(e);
}

bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
return actualValue;
}

同样,目标是有小数?像通常一样,但如果有一个包含货币符号和/或逗号的值,并且可以将其转换为小数,则返回该值。

谢谢

最佳答案

您可能最好利用内置支持来处理 NumberStyles 。通过这样做,您不仅可以计算常见的美元符号,还可以处理英镑、日元等...

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult valueResult = bindingContext.ValueProvider
.GetValue(bindingContext.ModelName);
ModelState modelState = new ModelState { Value = valueResult };
object actualValue = null;
try
{
if(!string.IsNullOrWhiteSpace(valueResult.AttemptedValue))
actualValue = Decimal.Parse(valueResult.AttemptedValue, NumberStyles.Currency, CultureInfo.CurrentCulture);
}
catch (FormatException e)
{
modelState.Errors.Add(e);
}

bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
return actualValue;
}

关于asp.net-mvc-3 - .NET MVC 3 自定义十进制?模型绑定(bind)器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6111963/

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