【问题标题】:ASP.NET MVC 2 RC2 Model Binding with NVARCHAR NOT NULL columnASP.NET MVC 2 RC2 模型绑定与 NVARCHAR NOT NULL 列
【发布时间】: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


【解决方案1】:

可能是重复的或在此行中的内容:

MVC binding form data problem

我担心自定义模型绑定器将是必要的。 ;)

【讨论】:

  • 谢谢。 Jab 对这个问题的回答很有用。
  • @mare:您能否更新您的链接以指向问题本身,而不是您的答案?那我就接受了。
【解决方案2】:

您可能希望使用实体的部分类实现,该实现为该特定属性实现 on 属性更改处理程序。当您检测到该属性已更改为 NULL 时,只需将其更改为 string.Empty。这样,只要将 NULL 分配给属性,它就会重置为空字符串。

【讨论】:

  • @tvanfosson:我可以,但是我必须重复相同的代码几十次(更糟糕的是——在很多情况下,我可能会创建部分类只是为了做到这一点)。请参阅我自己的答案以及更清洁的解决方案的链接。
  • 如果这是您一直想要的行为,我想这会成功。但是,如果该列可以为空,则它存在存储空字符串的逆问题。
  • true,如果您的意思是更改默认活页夹 - 但相同的答案还描述了如何使用数据注释在每个属性的基础上执行此操作。
猜你喜欢
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
  • 2012-11-13
  • 2011-04-30
  • 1970-01-01
  • 2014-04-18
  • 2011-04-27
相关资源
最近更新 更多