解决asp.net mvc UpdateModel更新对象后出现null问题的

网络编程 2025-03-25 09:45www.168986.cn编程入门

解决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值导致的更新失败。希望这个解决方案能帮助到有类似困扰的开发者们。

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by