【发布时间】:2009-07-09 16:48:42
【问题描述】:
My Sql Server 数据库有一些可以为空的 nvarchar 字段,并且没有包含空字符串的 nvarchar 字段。我想保持这种方式,但默认的 MVC 模型绑定器似乎将空字符串转换为空字符串。
当控制器检索到一个空的 nvarchar 数据库字段时,该空字段在控制器内部变成空字符串,然后视图从那里呈现它们,例如空白文本框。当页面发布时,默认模型绑定器使用这些空白文本框来更新模型,并且将以前的空字符串更改为空字符串。当数据更新回数据库时,空字符串会覆盖空值。
让模型绑定保持这些空值不变的最简单方法是什么?
【问题讨论】:
-
什么是 SS 数据库,SQL Server?实际上,如果您测试 String.Empty 或 "" 而不是 null,您应该能够忽略差异,因为这两个东西也会为 null 返回 true。
-
是的,SS = Sql Server。 Null 和空字符串不相同,无论是在 T-SQL 还是在 C# 中,您都不能忽略它们的区别。过去,我在一个项目中经历过痛苦的经历,其中两者的混合导致了很多意想不到的行为(错误)。例如,如果程序员刚刚测试 (x == null) 而不是在 C# 端使用 String.IsNullOrEmpty(x) 或在 SQL 中使用 (x IS NULL) 而不是 (x IS NULL OR LEN(x) = 0) 测试显然会随机失败,具体取决于 null 的默认值是否已更改为空字符串。
-
今天又被这个咬了。我错过了用 [Required] 装饰类属性,所以我的验证器 (xVal) 没有注意到该属性变成了一个空字符串。然后将包含这个空字符串属性的对象写入数据库,其中表字段上的 NOT NULL 约束当然什么也没做。
标签: asp.net-mvc