"Eval检查DBNull不起作用"

4
<%# Eval("Description") == DBNull.Value ? "empty" : "notempty"%>

即使在数据库中该字段为空(类型为varchar(),null),也始终显示“notempty”。 ... 还尝试检查空字符串:

<%# Eval("Description") == "" ? "empty" : "notempty"%>

它总是显示为非空值...这里出了什么问题?
3个回答

16

DBNull.Valuenull 是有区别的。可能字段返回的是 null

尝试进行以下操作:

<%# Eval("Description") == null ? "empty" : "notempty"%>

如果字段值类型应该是字符串,你可以这样做...

<%# (Eval("Description") as string) ?? "empty" %>

这个有用,你能简要地解释一下有什么不同吗?谢谢!! - Stewie Griffin
2
@Stewie Griffin,我认为最基本的解释是db值 vs .net值。基本上,DBNull.Value表示缺少的数据库值,而null表示为空的数据。 - Quintin Robinson
@QuintinRobinson,Null和DBNull之间有区别。请记住,大多数SQL引擎至少具有3状态值系统;而.Net基于2状态值系统。即使Nullable Generic更像是一个包装器而不是其他任何东西。 - GoldBishop

5
你有没有尝试过使用这种方法:
<%# Convert.IsDBNull(Eval("Description") ? "empty" : "notempty"%>

将此模式与 String.IsNullOrWhitespace() 结合使用,解决方案就很可靠。 - GoldBishop

4

实际上,它并没有在这个级别存储 DBNull。您需要查找 null 或空字符串,使用 string.IsNullOrEmpty 应该足够,它可以捕获 null 和空的两种状态。

<%# string.IsNullOrEmpty(Eval("Description").ToString()) ? "empty" : "notempty"%>  

如果描述为null,则会出现空引用错误。请调用ToString()方法。 - Stewie Griffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接