我的模型属性为string
类型。我绑定此模型以查看(剃刀视图)并将此属性绑定到隐藏字段。该属性的值为空(String.Empty
)。
当我将模型发布到控制器时,我得到的值是null而不是空白。
有什么想法吗?
答案 0 :(得分:2)
将[DisplayFormat(ConvertEmptyStringToNull = false)]添加到您的类标记中。
答案 1 :(得分:1)
这就是MVC框架在将请求数据映射到控制器参数时所执行的操作,并且请求数据是空值。如果你检查Request.Form
集合中的值,你会发现它实际上是一个空字符串,而不是空值。
您可以处理框架生成的空值,也可以从Request.Form
集合中读取数据。
答案 2 :(得分:1)
如果您尝试将空值保留为空值并将空字符串保留为空字符串以进行往返操作,则可能您可以定义一个特殊的常量字符串值来表示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()
答案 3 :(得分:0)
此链接应该会有所帮助。
Why do I get null instead of empty string when receiving POST request in from Razor View?
“默认模型绑定将为您创建一个新的SomeModel。字符串类型的默认值为null,因为它是引用类型,因此它被设置为null。”由statichippo原始回答