我试图限制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值并阻止运行时异常?
谢谢!
答案 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语句块不同。