InLine IIF Expression& DataBinder.Eval未按预期运行

时间:2013-01-19 19:14:11

标签: asp.net vb.net codeblocks

我正在尝试使用.tostring.remove(n)从字符串末尾删除字符。使用IIf语句下面的代码确认字符串是ISNullOrEmpty并返回TrueFalse。如果返回true,则""的字符串放在aspx页面中(这很好),第二部分出现问题,当IsNullOrEmpty返回False时会触发。

False值处检查字符串长度,如果字符串长度等于或大于17个字符,则返回True值并使用{{1}截断字符串如果返回.ToString.Remove(n)值,则保持字符串不受影响。

问题是如果字符串是1个字符或20个字符长,则会出现以下错误: False

这是代码块:

startIndex must be less than length of string

databinder从中绘制数据的数据库表确实允许NULLS,并且只有当任何给定记录存在NULL或空字符串时才会发生。

请帮助,这让我疯了!!!

1 个答案:

答案 0 :(得分:1)

您使用iif时遇到的问题是每次都会评估整个语句,而不仅仅是真或假部分。这意味着每次都会触发Remove(17),无论条件的评估结果如何。

您可以使用以下代码证明这一点:

    Dim sValue = IIf(Nothing, DoEval("true"), DoEval("false"))
    Console.WriteLine("Final " & sValue)

Private Function DoEval(value As String) As String
    Console.WriteLine(value)
    Return value
End Function

在这种情况下,您将看到写入输出窗口的true和false。

我们通过使用iif引入了很多问题,我们已禁止在我们的应用程序中使用它。

切换到传统的if then else条款会好得多。