【问题标题】:In MVC 3, how do I make the default model binder treat empty strings as "Empty" rather than "NULL"?在 MVC 3 中,如何使默认模型绑定器将空字符串视为“Empty”而不是“NULL”?
【发布时间】:2011-12-07 08:50:54
【问题描述】:

我使用 Entity Framework Code-First 和 POCO 进行数据库交互。我有一个名为“Title”的可选字段。

当我从表单中获取对象时,默认模型绑定器会自动将“Title”设为空而不是空。

如何让模型绑定器返回一个空字符串而不是 null?

感谢您的帮助

【问题讨论】:

  • 为什么不在视图模型或控制器中处理 null 呢?一个简单的var result = foo.title ?? string.Empty; 就可以了,不是吗?
  • 因为这会违反 DRY(不要重复自己。)我从多个地方获取该模型,并且必须在所有地方重复空字符串检查。
  • 您能否创建一个部分方法 (OnTitleChanging) 来执行 Bala R 推荐的检查?这将在一个地方完成,与您的 edmx 文件分开(因此它不会被覆盖)并且应该完成您需要的。
  • 设置title的值为string.Empty;在 POCO/Model 对象的构造函数中。
  • @Mark,在构造函数中设置值无济于事,因为默认模型绑定器将在之后调用属性的设置器。但是您可以更改特定 setter 的行为(如果 null 不是可能的值)并将 null 转换为 String.Empty。

标签: asp.net-mvc poco model-binding


【解决方案1】:

您要求非标准行为,因此您需要非标准解决方案。 扩展默认模型绑定器,覆盖其 CreateModel 方法 - 为特定情况做你想做的事,并为其他人返回 base.CreateModel。

不要忘记在应用程序启动时将其注册为默认模型绑定器。

【讨论】:

    【解决方案2】:

    老问题,但在 MVC4 中,您可以将其添加到您的 POCO 属性中:

    [DisplayFormat(ConvertEmptyStringToNull = false)]
    

    【讨论】:

    • 酷。感谢您发布此内容。
    猜你喜欢
    • 1970-01-01
    • 2015-01-31
    • 2014-09-10
    • 2012-12-29
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    相关资源
    最近更新 更多