ASP.NET内联表达式中的DBNull到String具有转换错误

时间:2011-05-24 23:13:26

标签: asp.net string casting dbnull

嘿伙计们,我数据库中的一个表有一个字段“描述”,允许'Nulls'。这在ASP.NET中呈现页面时会出现问题,因为我想确保我将字符串解码为数据库中的字符串,因为我正在编写它。当然,描述中有一些NULL。我希望保留这一领域。

所以我的ASP.NET页面有这个代码

<asp:TextBox ID="DescInfo" Text='<%# HttpUtility.HtmlDecode((string)Eval("Description")) %>' />

所以当我渲染页面时,我会得到:

Unable to cast object of type 'System.DBNull' to type 'System.String'.

我看待它的方式,我有两个选择:

  • 加载期间绑定

OR

  • 使表成为非NULL表并使用空值

任何人都有更好的想法吗?

4 个答案:

答案 0 :(得分:5)

虽然DBNull无法转换为字符串,但它确实有ToString()方法返回空字符串。我可能会这样做:

<%# HttpUtility.HtmlDecode(Eval("Description").ToString()) %>

这样您就不必测试DBNull或其他任何内容。 String.ToString()只返回字符串,DBNull.ToString()返回一个空字符串。这样做的好处是每行只调用一次Eval而不是两次。如果您的数据同时包含nullDBNull(您无法在null上调用ToString,但您可以在DBNull上),那么唯一可能让您失望的是我在这种情况下,不要认为这实际上是可能的。

答案 1 :(得分:1)

您可以将(字符串)Eval(“Description”)替换为:

(Eval("Description") is System.DBNull) ? String.Empty : Eval("Description")

答案 2 :(得分:1)

您需要先检查该值是否为空。您可以使用IsDBNull()检查空值。

您可以使用

IIf(IsDBNull(DataRow("Test")), "Do if true", String.Empty)

答案 3 :(得分:0)

这样的事情应该有效。我没有为你测试过。

<%# HttpUtility.HtmlDecode(Eval("Description") == System.DBNull ? String.Empty : (string(Eval("Description")) %>