我可能已经过时了,但我坚持的一个原则是尽可能避免空值。
但是我发现,对于一个强类型视图,用户输入我要保存的对象的属性,如果没有输入某些字段,则将它们指定为null。
然后,当您尝试保存更改时,验证失败。
因此,不是将每个属性设置为空字符串,而是如何自动将表单上的每个TextBox设置为默认为空字符串而不是null?
答案 0 :(得分:55)
您可以在模型中的字符串属性中添加以下属性:
[DisplayFormat(ConvertEmptyStringToNull=false)]
因此,每当有人发布带有空文本字段的表单时,这些都是空字符串而不是null ...
答案 1 :(得分:2)
说实话,我会说你的编码方法已经过时且存在缺陷。你应该处理所有可能性,这并不难。这正是string.IsNullOrEmpty(value);
的用途。
我猜你的验证逻辑是这样的:
if (value == string.Empty) { isValid = false; }
因此它不处理空值。您应该替换该检查,以便它还检查空值。
string value1 = null;
string value2 = string.Empty;
string.IsNullOrEmpty(value1); // true
string.IsNullOrEmpty(value2); // true
答案 2 :(得分:1)
在接受的答案中描述的在每个模型属性上使用属性的替代解决方案是使用自定义模型绑定器,请参阅string.empty converted to null when passing JSON object to MVC Controller
答案 3 :(得分:1)
我在处理需要空字符串的旧服务时遇到了这个问题。我创建了一个扩展方法:
public static string GetValueOrDefault(this string str)
{
return str ?? String.Empty;
}
因此,当您想要确保任何null为空的字符串
时,您可以使用此方法yourString1.GetValueOrDefault();
yourString2.GetValueOrDefault();