asp.net – 模型绑定 – Nullable decimal和double默认为0而不是
发布时间:2020-12-16 03:28:18 所属栏目:asp.Net 来源:网络整理
导读:当我的表单发布到我的控制器操作,并且表单绑定到我的模型时,可空双精度和小数的空白表单值默认为0,但可为空的整数的空白表单值默认为null.这是正确的吗? 我的模型有几个可以为空的字段的可空类型.它有可空的整数,双精度和小数.然后我有一个常规表单,其中包
当我的表单发布到我的控制器操作,并且表单绑定到我的模型时,可空双精度和小数的空白表单值默认为0,但可为空的整数的空白表单值默认为null.这是正确的吗?
我的模型有几个可以为空的字段的可空类型.它有可空的整数,双精度和小数.然后我有一个常规表单,其中包含每个属性的文本框,并且它们都默认为空(空字符串).当此表单以所有空表单值发回到我的控制器操作,并且它绑定到我的模型时,空的双精度数和小数数显示为0,空的整数为空. 在我看来,当传入一个空的表单值时,所有可空类型都应默认为null,但即使不是这种情况,看起来非常不一致,双精度和小数的处理方式与整数不同. 解决方法
这个问题似乎在MVC4中得到了解决,因为我无法重现这个问题.我的空文本框都将null绑定到我的模型的可空int,double或decimal.没有问题.所以问题可能在其他地方,或者这可能是MVC3中的一个错误,不再是.
也就是说,如果您仍然遇到问题并且无法使用MVC4,请尝试制作自己的自定义模型绑定器,以完成您需要做的事情.这是十进制的示例: public class NullableDecimalBinder : IModelBinder { public object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext) { ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); ModelState modelState = new ModelState { Value = valueResult }; object result = null; if (valueResult.AttemptedValue.Length > 0) { try { // Bonus points: This will bind using the user's current culture. result = Convert.ToDecimal(valueResult.AttemptedValue,System.Globalization.CultureInfo.CurrentCulture); } catch (FormatException e) { modelState.Errors.Add(e); } catch (InvalidOperationException e) { modelState.Errors.Add(e); } } bindingContext.ModelState.Add(bindingContext.ModelName,modelState); return result; } } 然后,要使用它,请将此行添加到Global.asax的Application_Start中: ModelBinders.Binders.Add(typeof(decimal?),new NullableDecimalBinder()); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 无法加载文件或程序集“Oracle.ManagedDataAcce
- asp.net-core – 是否可以在ASP.NET Core中使用自定义Model
- asp.net – 如何找到哪个控制器/操作发生错误?
- 如何在asp.net中使用控件状态
- remoting和webservice有什么区别
- asp.net-mvc – 将类应用于@ Html.ValidationMessageFor
- asp.net-mvc – 在ASP.NET MVC中生成链接?
- asp.net – 更改视图位置
- ASP.NET页面方法vs Web服务
- asp.net – 我应该使用哪个PreApplicationStartMethod?