2

嘿伙计们,我数据库中的一个表有一个字段“描述”,它允许为空。这会导致在 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'.

在我看来,我有两个选择:

  • 加载期间绑定

或者

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

有人可能有更好的主意吗?

4

4 回答 4

5

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

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

这样你就不必测试DBNull或任何东西。String.ToString()只返回字符串,并DBNull.ToString()返回一个空字符串。这还具有Eval每行仅调用一次而不是两次的优点。唯一可能让您感到困惑的是,如果您的数据同时包含nulland DBNull(您不能调用 ToString onnull但您可以调用 on DBNull),但我认为在这种情况下这实际上是不可能的。

于 2011-05-24T23:20:22.750 回答
1

您可以将 (string)Eval("Description") 替换为:

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

于 2011-05-24T23:16:51.880 回答
1

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

你可以使用

IIf(IsDBNull(DataRow("Test")), "Do if true", String.Empty)
于 2011-05-24T23:17:02.700 回答
0

像这样的东西应该工作。我没有给你测试过。

<%# HttpUtility.HtmlDecode(Eval("Description") == System.DBNull ? String.Empty : (string(Eval("Description")) %>
于 2011-05-24T23:16:53.300 回答