ViewData.ModelState.IsValid是假的,因为Mvc无法解析用逗号分隔成百上千的值

本文关键字:成百上千 分隔 IsValid ModelState Mvc 因为 ViewData | 更新日期: 2023-09-27 18:29:50

我有类型为 int? 的字段。

在视图上,我使用jquery插件,它将textBox值与逗号分开,如下所示:3,463,436 = 3463436 - 它必须是int值。

但是在表单 subbmit 上,我收到错误"值'3,463,436'对最大连续无效。

有什么建议吗?谢谢。

ViewData.ModelState.IsValid是假的,因为Mvc无法解析用逗号分隔成百上千的值

比去掉逗号更好的解决方案是使用 .NET内置的数字样式解析。

public class MyBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        string key = bindingContext.ModelName;
        var v = ((string[])bindingContext.ValueProvider.GetValue(key).RawValue)[0];
        int outPut;
        if (int.TryParse(v, NumberStyles.AllowThousands, new CultureInfo("en-US"), out outPut))
           return outPut;
        return base.BindModel(controllerContext, bindingContext);
    }
}
ModelBinders.Binders.Add(typeof(int), new MyBinder());

在 MVC ASP.NET 中,一个选项是实现一个自定义ModelBinder,从提交的值中删除逗号。 即实现DefaultModelBinder的子类

以下是对decimal数据类型的小数分隔符执行此操作的方法:

如何在 ASP.NET MVC控制器中设置小数分隔符?

对于int数据类型的千位分隔符,您将必须使用类似的东西。