我正在使用MVC 3并尝试将字段留空以作为零长度字符串而不是空值发送到数据库。这可能与数据注释属性有关吗?
如果没有,从nulls转换的最合适的地方是什么?它是在模型验证期间吗?
答案 0 :(得分:12)
虽然不理想,但这是我所知道的最佳方式:[DisplayFormat(ConvertEmptyStringToNull = false)]
位于酒店上方。它保留了模型中的逻辑,这是一种很好的实践,它直接解决了这个问题。这是必要的,这只是一个无赖。
private string _summary = "";
[Required]
[DisplayFormat(ConvertEmptyStringToNull = false)]
public virtual string Summary
{
get { return _summary; }
set { _summary = value; }
}
答案 1 :(得分:0)
我不会在验证器中执行此操作,但可能在模型绑定中(或甚至在模型本身中)。
通常,在我的模型类中,我将字符串属性设置为默认为空字符串,并且在其setter中,我将空值转换为空字符串。
一遍又一遍地写这些重复的东西真是太痛苦了,但是不必处理空值就好了。
答案 2 :(得分:0)
在构造函数中将属性设置为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);
}