如何设置TextBox空字符串的默认值而不是null
Posted
技术标签:
【中文标题】如何设置TextBox空字符串的默认值而不是null【英文标题】:How to set default value of TextBox empty string instead of null 【发布时间】:2011-03-29 08:45:00 【问题描述】:我可能已经过时了,但我坚持的一个原则是尽可能避免空值。
但是我发现,对于用户输入我要保存的对象的属性的强类型视图,如果未输入某些字段,它们将被分配为 null。
然后,当您尝试保存更改时,验证失败。
那么,与其将每个属性设置为空字符串,如何自动将表单上的每个 TextBox 设置为默认为空字符串而不是 null?
【问题讨论】:
我一直觉得尽可能避免空值是一件奇怪的事情。空是一件美丽的事情。在数据库表中,记录行有一个可以为空的列,它为空表示以前没有提供任何值。对于我一次又一次找到的公司而言,这些知识对于业务规则和逻辑非常重要。 我可以看到空值在计算一系列数字的平均值时很有用。 null 也适用于尚未输入的日期。否则为什么 null 比空字符串或零更好?它似乎所做的只是生成更多样板代码来阻止不需要的空引用异常。 这是一个很好的观点,虽然不是在大多数相同的地方检查 null,为了防止不需要的 null 引用异常,你正在检查 if!EmptyString)。空引用异常变老了,但它们可能是一个很好的“质量控制/测试”水平。空字符串通过,没有异常,但它不应该为空,null 会触发异常,因此开发人员可能会更快地发现错误。很有趣,我讨厌在 Sql Select 结果中看到空字符串列 lol Why do I get null instead of empty string when receiving POST request in from Razor View?的可能重复 我先问了这个问题,所以另一个问题可能与我的重复。 【参考方案1】:我在处理需要空字符串的旧服务时遇到了这个问题。我创建了一个扩展方法:
public static string GetValueOrDefault(this string str)
return str ?? String.Empty;
因此,当您想确保任何为空的字符串变为空时,您可以使用它
yourString1.GetValueOrDefault();
yourString2.GetValueOrDefault();
【讨论】:
【参考方案2】:如已接受的答案中所述,在每个模型属性上使用属性的替代解决方案是使用自定义模型绑定器,请参阅string.empty converted to null when passing JSON object to MVC Controller
【讨论】:
【参考方案3】:您可以在模型中的字符串属性上添加以下属性:
[DisplayFormat(ConvertEmptyStringToNull=false)]
所以每当有人发布带有空文本字段的表单时,这些将是一个空字符串而不是 null...
【讨论】:
它就是我要找的东西。谢谢@Yngve B. Nilsen【参考方案4】:说实话,我会说您的编码方法已经过时且存在缺陷。你应该处理所有的可能性,这并不难。这正是string.IsNullOrEmpty(value);
的用途。
我猜你的验证逻辑是这样的:
if (value == string.Empty) isValid = false;
所以它不处理空值。您应该替换该检查,以便它也检查空值。
string value1 = null;
string value2 = string.Empty;
string.IsNullOrEmpty(value1); // true
string.IsNullOrEmpty(value2); // true
【讨论】:
我可以看到我的问题不清楚。我正在寻找与元数据或扩展模板有关的答案。这是一个 MVC 问题,而不是 C# 问题。 在您的问题中发布一些代码,以便我们看到您想要做什么。 我不确定我可以给你看什么代码。我在视图中有一些文本框,如果用户在提交之前没有输入值,它们默认为空。如果基础模型中的字段不可为空,则会导致验证失败。我在 SO 上找到了基于这个问题的答案; ***.com/questions/1718501/… 我没有修剪,而是将一个空字符串设置为一个空字符串。我对这个答案很满意,但也许有更简单的答案?以上是关于如何设置TextBox空字符串的默认值而不是null的主要内容,如果未能解决你的问题,请参考以下文章
在 JSON.Net 中处理不存在的 JSON 令牌如何返回默认值而不是抛出异常
当未设置可选字段时,大象鸟库生成字段的默认值而不是 null
在序列化时,我应该更改什么设置来获取枚举的int值而不是其字符串表示形式? [重复]
Material UI Autocomplete 空字符串的默认值