1

我正在尝试使用.tostring.remove(n). 使用语句下面的代码IIf确认字符串是 ISNullOrEmpty 并返回Trueor False。如果true返回的字符串""放置在 aspx 页面中(这工作正常),则问题出现在 IsNullOrEmpty 返回时触发的第二部分False

根据一个False值检查字符串长度,如果字符串长度等于或超过 17 个字符,则返回一个值,并且使用如果返回一个值True来截断字符串,则该字符串保持不变。.ToString.Remove(n)False

问题是,如果字符串是 1 个字符或 20 个字符长,则会不断发生以下错误: startIndex must be less than length of string

这是代码块:

<%# IIf(String.IsNullOrEmpty(Convert.ToString(DataBinder.Eval(Container.DataItem, "SponsorEmail"))),
"",
IIf(Convert.ToString(DataBinder.Eval(Container.DataItem, "SponsorEmail")).Length > 17,
Eval("SponsorEmail").ToString.Remove(17),
Eval("SponsorEmail")))%>

数据绑定器从中提取数据的数据库表确实允许 NULLS,并且仅当任何给定记录存在 NULL 或空字符串时才会发生。

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

4

1 回答 1

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切换到传统条款会更好。

于 2013-01-19T19:28:48.993 回答