ASP.NET内联表达式中的DBNull到String会产生转换错误

|| 大家好,我数据库中的一个表的字段“说明”为允许的值为“空”。在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表,并改用空值 有人有更好的主意吗?     
已邀请:
虽然不能将
DBNull
强制转换为字符串,但它确实具有
ToString()
方法,该方法返回空字符串。我可能会这样:
<%# HttpUtility.HtmlDecode(Eval(\"Description\").ToString()) %>
这样,您就不必测试
DBNull
或其他任何东西。
String.ToString()
仅返回字符串,
DBNull.ToString()
返回空字符串。这还有一个优点,每行只调用一次“ 8”,而不是两次。唯一可能使您失望的是,如果您的数据同时包含
null
DBNull
(您无法在
null
上调用ToString但可以在
DBNull
上调用ToString),但我认为在这种情况下实际上是不可能的。     
您可以将(string)Eval(\“ Description \”)替换为:
(Eval(\"Description\") is System.DBNull) ? String.Empty : Eval(\"Description\")
    
您需要首先检查该值是否为空。您可以使用IsDBNull()检查空值。 你可以用
IIf(IsDBNull(DataRow(\"Test\")), \"Do if true\", String.Empty)
    
这样的事情应该起作用。我没有为您测试过。
<%# HttpUtility.HtmlDecode(Eval(\"Description\") == System.DBNull ? String.Empty : (string(Eval(\"Description\")) %>
    

要回复问题请先登录注册