【问题标题】:How do you handle NULL values in DataBound controls?如何处理 DataBound 控件中的 NULL 值?
【发布时间】:2014-12-29 04:13:37
【问题描述】:

我试图限制 ASP.NET 标签控件中显示的字符,这些控件的文本值数据绑定到 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)%>' />

我将 ASP.NET 与 VB.NET 一起使用。我也尝试过使用 CSS "text-overflow: ellipsis" 方法,但我遇到了一些尚未解决的表格格式问题。

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

谢谢!

【问题讨论】:

  • 使用新的(ish)If Operator 而不是IIF 来缩短评估。 IIF 将评估所有元素/子句,以便 Item.LabelDescription.ToString.Length 即使您尝试对其进行测试也会导致异常。

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


【解决方案1】:

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

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

无论表达式是否为真,TruePart FalsePart 语句都会被执行。由于它们包含对可能是 DBNull/Nothing/null 的引用,因此您会收到错误消息。

不过,Nothing 与 DBNull 不同,如果 Item 是可以为 Nothing/null 的 Object,那么测试 Nothing/null 的描述就会有问题。

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

If( Condition, TruePart, FalsePart )

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

既然你想要对象 Nothing 我会使用 Nothing 关键字而不是 VB 的 IsNothing 函数:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多