解决asp.net mvc UpdateModel更新对象后出现null问题的
解决ASP.NET MVC中UpdateModel更新对象后出现null值的问题
在ASP.NET MVC 4.0的项目开发中,你可能会遇到这样一个问题:当表单中有一些字段未被填写而直接进行POST提交时,使用UpdateModel更新模型后,这些未填写的字段会变成null值。这种情况对于需要严格避免null值进入数据库的系统来说,是个不小的困扰。
情况分析:
在填写表单时,如果有字段留空未填,直接进行POST提交。在action中,使用UpdateModel来更新model,会发现那些未填写的表单字段都变成了null。
原因分析:
这可能是因为在项目中设置了判断null值不能提交到数据库中的规则。当检测到字段值为null时,更新操作可能无法成功执行。
解决方法:
为了解决这个问题,我们可以采取以下步骤:
1. 新建一个类,继承自DefaultModelBinder。
在命名空间中定义一个新类EmptyStringToNullModelBinder,它继承了DefaultModelBinder。
代码如下:
```csharp
using SystemponentModel;
using System.Web.Mvc;
namespace CustomerWebsite.Mvc
{
public sealed class EmptyStringToNullModelBinder : DefaultModelBinder
{
protected override void SetProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value)
{
if (value == null && propertyDescriptor.PropertyType == typeof(string))
{
value = string.Empty; // 将null值替换为空字符串
}
base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value);
}
}
}
```
2. 在Global.asax的Application_Start方法中替换默认的DefaultModelBinder。
在Global.asax文件中,找到Application_Start方法,并将新的EmptyStringToNullModelBinder实例赋给DefaultModelBinder的DefaultBinder属性。这样,所有的模型绑定操作都会使用我们自定义的模型绑定器。
代码如下:
```csharp
protected void Application_Start()
{
ModelBinders.Binders.DefaultBinder = new EmptyStringToNullModelBinder();
// 其他初始化代码...
}
```
这样设置后,当表单中的字符串字段留空未填时,UpdateModel更新对象后不会再出现null值问题。系统将空字符串替换为null值,从而避免了因null值导致的更新失败。希望这个解决方案能帮助到有类似困扰的开发者们。
编程语言
- 解决asp.net mvc UpdateModel更新对象后出现null问题的
- 在Linux系统中搭建Node.js开发环境的简单步骤讲解
- CI操作cookie的方法分析(基于helper类库)
- jfreechart插件将数据展示成饼状图、柱状图和折线
- php ajax无刷新分页,支持id定位
- vue2.0 资源文件assets和static的区别详解
- JavaScript String 对象常用方法总结
- js中获取键盘按下键值event.keyCode、event.charCode和
- Angular6使用forRoot() 注册单一实例服务问题
- 详解Vuejs2.0 如何利用proxyTable实现跨域请求
- 使用Raygun对Node.js应用进行错误处理的方法
- 浅谈JavaScript的push(),pop(),concat()方法
- jQuery trigger()方法用法介绍
- JS+CSS实现可以凹陷显示选中单元格的方法
- PHP网络操作函数汇总
- Javascript实现图片加载从模糊到清晰显示的方法