如何在DataBound控件中处理NULL值?

时间:2014-12-28 18:15:25

标签: asp.net sql-server vb.net label databound

我试图限制ASP.NET Label控件中显示的字符,这些控件的Text值数据绑定到SQL数据库。如果数据库中的字段不是NULL,我没有任何问题。如果它们是NULL,我得到异常“对象引用未设置为对象的实例。”

我的代码如下:

<asp:Label ID="LabelDescriptionLabel" runat="server" Text='<%# IIf(Not IsDBNull(Item.LabelDescription), IIf(Item.LabelDescription.ToString.Length > 30, Left(Item.LabelDescription, 30) & "...", Item.LabelDescription), Item.LabelDescription)%>' />

我也试过以下,没有任何运气:

<asp:Label ID="LabelDescriptionLabel" runat="server" Text='<%# IIf(Not IsNothing(Item.LabelDescription), IIf(Item.LabelDescription.ToString.Length > 30, Left(Item.LabelDescription, 30) & "...", Item.LabelDescription), Item.LabelDescription)%>' />

我在VB.NET中使用ASP.NET。我也试过使用CSS“text-overflow:ellipsis”方法,但是我有一些表格格式问题,我还没有解决。

有没有办法处理这些NULL值并阻止运行时异常?

谢谢!

1 个答案:

答案 0 :(得分:1)

您遇到的一个问题是旧的IIF是一个函数,它在决定返回什么之前评估所有部分。

IIF(Not IsDBNull(Item.LabelDescription), TruePart, FalsePart)

如果表达式为真,则无关紧要,TruePart FalsePart语句将始终执行。由于它们包含对可能是DBNull / Nothing / null的引用,因此会出现错误。

其他一些东西是没有什么和DBNull不一样,如果Item是一个可以是Nothing / null的Object,那么测试Nothing / null的描述将会有问题。

自2008年以来If Operator已经可用。结构相同,但它仅评估测试条件和适用的True False表达式:

If( Condition, TruePart, FalsePart )

“短路”会阻止评估不适用的表达式/部分。只要代码的其余部分有效,您就应该能够从I函数中剪切其中一个IIF

由于你想要对象Nothing,我会使用Nothing关键字而不是VB IsNothing函数:

If(Item IsNot Nothing), 
        If(Item.LabelDescription.ToString.Length > 30, x, y), y)

If运算符与If / Then / Else语句块不同。