Asp.net mvc 如何设置文本框空字符串的默认值而不是null

Asp.net mvc 如何设置文本框空字符串的默认值而不是null,asp.net-mvc,model,textbox,null,default-value,Asp.net Mvc,Model,Textbox,Null,Default Value,我可能已经过时了,但我坚持的一个原则是尽可能避免空值 然而,我发现,对于强类型视图,用户在其中输入要保存的对象的属性,如果未输入某些字段,则会将其指定为null 然后,当您尝试保存更改时,验证失败 因此,与其将每个属性设置为空字符串,我如何能自动将表单上的每个文本框设置为默认为空字符串而不是空字符串?老实说,您的编码方法已经过时,存在缺陷。你应该处理所有的可能性,这并不难。这正是string.IsNullOrEmpty(value)的含义用于 我猜您的验证逻辑是这样的: if (value ==

我可能已经过时了,但我坚持的一个原则是尽可能避免空值

然而,我发现,对于强类型视图,用户在其中输入要保存的对象的属性,如果未输入某些字段,则会将其指定为null

然后,当您尝试保存更改时,验证失败


因此,与其将每个属性设置为空字符串,我如何能自动将表单上的每个文本框设置为默认为空字符串而不是空字符串?

老实说,您的编码方法已经过时,存在缺陷。你应该处理所有的可能性,这并不难。这正是
string.IsNullOrEmpty(value)的含义用于

我猜您的验证逻辑是这样的:

if (value == string.Empty) { isValid = false; } 
所以它不处理空值。您应该替换该检查,以便它也检查空值

string value1 = null;
string value2 = string.Empty;

string.IsNullOrEmpty(value1); // true
string.IsNullOrEmpty(value2); // true

您可以在模型中的字符串属性上设置以下属性:

[DisplayFormat(ConvertEmptyStringToNull=false)]

因此,每当有人发布带有空文本字段的表单时,这些字段将是一个空字符串而不是null…

在每个模型属性上使用属性的替代解决方案(如接受的答案中所述)是使用自定义模型绑定器,请参见

我在处理需要空字符串的旧服务时遇到了这个问题。我创建了一个扩展方法:

public static string GetValueOrDefault(this string str)
        {
            return str ?? String.Empty;
        }
因此,当您希望确保任何空字符串变为空时,可以使用此选项

yourString1.GetValueOrDefault();
yourString2.GetValueOrDefault();

我看得出我的问题不清楚。我正在寻找一个答案做元数据或扩展模板。这是一个MVC问题,而不是C#问题。在你的问题中发布一些代码,这样我们就可以看到你想做什么。我不确定我能向你展示什么代码。我在视图中有一些文本框,如果用户在提交之前没有输入值,它们默认为null。如果基础模型中的字段不可为空,则会导致验证失败。基于这个问题,我找到了答案;我没有修剪,而是将空字符串设置为空字符串。我对这个答案很满意,但也许有一个更简单的答案?这就是我想要的。Thanx@Yngve B.NilsenI总是发现尽可能避免空值是一件奇怪的事情。空是一件美好的事情。在数据库表中,记录行有一个可为null的列,如果为null,则表示以前从未提供过任何值。这些知识对于我一次又一次发现的公司的业务规则和逻辑来说非常重要。我可以看到空值在计算一系列数字的平均值时非常有用。空值也适用于尚未输入的日期。否则,为什么null比空字符串或零更好?它所做的一切似乎就是生成更多的锅炉板代码来阻止不必要的nullreference异常。这是一个很好的观点,尽管不是在大多数相同的位置检查null,而是为了防止不必要的nullreference异常,您正在检查if!清空)。空引用异常已经过时,但它们可能是一个良好的“质量控制/测试”级别。空字符串传递,没有异常,但它不应该为空,null引发异常,因此开发人员发现错误的速度可能更快。有趣的是,我讨厌在Sql Select结果中看到空字符串列,因为可能是我先问的问题的重复,所以另一个问题可能是我的重复。