2

我有一个具有string类型属性的模型。我将此模型绑定到视图(剃刀视图)并将此属性绑定到隐藏字段。该属性的值为空白 ( String.Empty)。

当我将模型发布到控制器时,我得到的值是 null 而不是空白。

任何想法?

4

4 回答 4

4

将 [DisplayFormat(ConvertEmptyStringToNull = false)] 添加到您的类标记中。

于 2018-08-16T18:49:51.893 回答
1

这就是 MVC 框架在将请求数据映射到控制器参数时所做的事情,并且请求数据是一个空值。如果您检查Request.Form集合中的值,您会发现它实际上是一个空字符串,而不是空值。

您可以处理框架生成的空值,也可以从Request.Form集合中读取数据。

于 2013-05-13T13:01:32.550 回答
1

如果您尝试将 null 值保留为 null 并将空字符串保留为往返操作的空字符串,也许您可​​以定义一个特殊的常量字符串值来表示 null。在静态类中可能是这样的(因此您可以对其进行扩展):

private const string NULL_STRING = "__@NULL@__";

public static string StringifyIfNull(this string s) {
  return s == null ? NULL_STRING : s;
}

public static string DestringifyIfNull(this string s) {
  return NULL_STRING == s ? null : s;
}

因此,在模型上设置隐藏字符串属性时,使用hiddenString.StringifyIfNull(),在 POST 后读回隐藏值时,使用model.HiddenString.DestringifyIfNull()

于 2013-05-20T07:56:10.553 回答
0

这个链接应该很有帮助。

从 Razor View 接收 POST 请求时,为什么我得到 null 而不是空字符串?

“默认模型绑定将为您创建一个新的 SomeModel。字符串类型的默认值为 null,因为它是引用类型,所以它被设置为 null。” 静态河马的原始答案

于 2013-05-13T13:24:21.227 回答