首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在十进制上使用DisplayFormat进行模型绑定不起作用

在十进制上使用DisplayFormat进行模型绑定不起作用
EN

Stack Overflow用户
提问于 2022-08-02 17:26:53
回答 1查看 78关注 0票数 0

asp.net-core-mvc

我有一个带有一个十进制属性的ViewModel:

代码语言:javascript
复制
public class RdoViewModel
{
    [DisplayFormat(DataFormatString = "{0:C0}", ApplyFormatInEditMode = true)]
    public decimal Balance { get; set; } = 100000;
}

这是我的控制器方法。

代码语言:javascript
复制
public IActionResult Rdo()
{
    var vm = new RdoViewModel();
    vm.Balance = 150000;
    return View(vm);
}
[HttpPost]
public IActionResult Rdo(RdoViewModel vm)
{
    var balance = vm.Balance;
    return View(vm);
}

当我提交表单时,MVC模型绑定无法解决如何将字符串$150,000转换回150000。

我似乎找不到关于这个话题的任何其他问题。其他人都在做什么?

EN

回答 1

Stack Overflow用户

发布于 2022-08-03 16:28:57

好的,下面是创建自定义十进制模型绑定器的三个步骤

  1. 创建模型绑定器.

代码语言:javascript
复制
public class CustomDecimalModelBinder : IModelBinder
{
    public Task BindModelAsync(ModelBindingContext bindingContext)
    {
        if (bindingContext.ModelType == typeof(decimal) || bindingContext.ModelType == typeof(decimal?))
        {
            var valueToParse = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
            if (valueToParse != null && valueToParse.Length > 0)
            {
                decimal parsedDecimal = 0;
                Decimal.TryParse(valueToParse.ToString(), NumberStyles.Any, CultureInfo.CurrentCulture, out parsedDecimal);
                bindingContext.Result = ModelBindingResult.Success(parsedDecimal);
            }
        }

        return Task.CompletedTask;
    }
}

  1. 创建模型绑定程序提供程序

代码语言:javascript
复制
public class CustomModelBinderProvider : IModelBinderProvider
{
    public IModelBinder GetBinder(ModelBinderProviderContext context)
    {
        if (context.Metadata.ModelType == typeof(decimal))
            return new CustomDecimalModelBinder();

        return null;
    }
}

  1. 将其连接到Startup.cs ConfigureServices方法

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc(options =>
    {
        options.ModelBinderProviders.Insert(0, new CustomModelBinderProvider());
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73211449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档