我有一个具有string
类型属性的模型。我将此模型绑定到视图(剃刀视图)并将此属性绑定到隐藏字段。该属性的值为空白 ( String.Empty
)。
当我将模型发布到控制器时,我得到的值是 null 而不是空白。
任何想法?
我有一个具有string
类型属性的模型。我将此模型绑定到视图(剃刀视图)并将此属性绑定到隐藏字段。该属性的值为空白 ( String.Empty
)。
当我将模型发布到控制器时,我得到的值是 null 而不是空白。
任何想法?
将 [DisplayFormat(ConvertEmptyStringToNull = false)] 添加到您的类标记中。
这就是 MVC 框架在将请求数据映射到控制器参数时所做的事情,并且请求数据是一个空值。如果您检查Request.Form
集合中的值,您会发现它实际上是一个空字符串,而不是空值。
您可以处理框架生成的空值,也可以从Request.Form
集合中读取数据。
如果您尝试将 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()
这个链接应该很有帮助。
从 Razor View 接收 POST 请求时,为什么我得到 null 而不是空字符串?
“默认模型绑定将为您创建一个新的 SomeModel。字符串类型的默认值为 null,因为它是引用类型,所以它被设置为 null。” 静态河马的原始答案