【发布时间】:2011-02-05 00:20:43
【问题描述】:
请注意:我已经回答了我自己的问题,并提供了指向类似问题答案的链接。一旦被允许,我会接受这个答案(除非有人同时提出更好的答案)。
我有一个定义为 NVARCHAR(1000) NOT NULL DEFAULT(N'') 的数据库列 - 换句话说,一个默认值为空白的不可为空的文本列。
我有一个由 Linq-to-SQL 类设计器生成的模型类,它正确地将属性标识为不可可为空。
我认为该属性有一个TextAreaFor。我在控制器中使用UpdateModel 从表单中获取值并填充模型对象。
如果我查看网页并将文本区域留空,UpdateModel 坚持将属性设置为NULL 而不是空字符串。 (即使我在调用UpdateModel 之前在代码中将值设置为空白,它仍然会用NULL 覆盖它)。这当然会导致后续数据库更新失败。
我可以在调用UpdateModel 之后检查NULL 的所有此类属性,但这似乎很荒谬 - 肯定有更好的方法吗?
请不要告诉我我需要一个自定义模型绑定器来处理这样一个简单的场景......!
【问题讨论】:
-
另外,我不知道如何指定一个字符串类型“非空”,这是不可能的,字符串是引用类型,它可以为空。如果不为空会是什么?空字符串?当然,string.empty 是一种选择,但默认情况下框架不会创建空字符串,例如 string MyString;
-
@mare:因为我使用 VS2008“Linq to SQL Classes”设计器来创建我的模型类,所以它有一个 UI 允许我在“数据库图”中查看类看法。通过它,我可以检查各种表和列的属性,这就是我可以看到它理解它是一个不可为空的列的地方。我不明白为什么这不能反映在生成的类中(而且我确实不明白为什么默认值也不能在那里反映!)。
-
它必须隐式知道当出现不可为空的 SQL 列时,将其默认值替换为 string.Empty。我知道这在您的情况和许多其他情况下可能很有用,但显然(不幸的是)它不能那样工作。
标签: asp.net-mvc linq-to-sql data-binding asp.net-mvc-2 updatemodel