【发布时间】:2011-07-20 00:20:57
【问题描述】:
我正在使用 MVC 3 并尝试将字段留空以作为零长度字符串而不是空值发送到数据库。这可能与数据注释属性有关吗?
如果不是,从空值转换的最合适的位置是什么?是在模型验证期间吗?
【问题讨论】:
我正在使用 MVC 3 并尝试将字段留空以作为零长度字符串而不是空值发送到数据库。这可能与数据注释属性有关吗?
如果不是,从空值转换的最合适的位置是什么?是在模型验证期间吗?
【问题讨论】:
我不会在验证器中这样做,但可能会改为在模型绑定中(甚至在模型本身中)。
通常,在我的模型类中,我将字符串属性设置为默认为空字符串,并且在它们的设置器中,我将空值转换为空字符串。
一遍又一遍地写这些重复的东西有点痛苦,但不必处理空值要好得多。
【讨论】:
在构造函数中设置属性等于string.empty。
或者,虽然这有点贵,但您可以创建一个执行以下操作的扩展方法,然后在构造函数中调用它:
var stringPropertyInfos = GetType()
.GetProperties(BindingFlags.Instance|BindingFlags.Public)
.Where(p => p.PropertyType == typeof(string));
foreach(var propertyInfo in stringPropertyInfos){
propertyInfo.SetValue(this,string.Empty,null);
}
【讨论】:
DefaultModelBinder,并将其分配给string.Empty,而不是默认为null。
虽然不理想,但这是我所知道的最好的方式:[DisplayFormat(ConvertEmptyStringToNull = false)] 在属性上方。它将逻辑保留在模型中,这是一种很好的做法,它直接解决了问题。这是必要的,这真是令人遗憾。
private string _summary = "";
[Required]
[DisplayFormat(ConvertEmptyStringToNull = false)]
public virtual string Summary
{
get { return _summary; }
set { _summary = value; }
}
【讨论】: