asp.net-core-mvc
我有一个带有一个十进制属性的ViewModel:
public class RdoViewModel
{
[DisplayFormat(DataFormatString = "{0:C0}", ApplyFormatInEditMode = true)]
public decimal Balance { get; set; } = 100000;
}这是我的控制器方法。
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。
我似乎找不到关于这个话题的任何其他问题。其他人都在做什么?
发布于 2022-08-03 16:28:57
好的,下面是创建自定义十进制模型绑定器的三个步骤
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;
}
}public class CustomModelBinderProvider : IModelBinderProvider
{
public IModelBinder GetBinder(ModelBinderProviderContext context)
{
if (context.Metadata.ModelType == typeof(decimal))
return new CustomDecimalModelBinder();
return null;
}
}中
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options =>
{
options.ModelBinderProviders.Insert(0, new CustomModelBinderProvider());
});https://stackoverflow.com/questions/73211449
复制相似问题