2012-12-01 30 views
0

这似乎是一个相当直接的问题,但我不断得到相同的异常,我不知道为什么。子串不按预期工作

我只能假设它与误解VB.NET中子字符串的工作方式有关。

下面的代码,不断抛出一个异常ArgumentOutOfRange:

现在什么应该是在这里发生,如果item.description是超过150个字符输出的第一个150,否则输出整个字符串
<%=Html.Encode(IIf(item.description.Length > 150, item.description.Substring(0, 150), item.description))%> 

。问题在于,不管if语句的结果长度如何,它总是试图获取子字符串。

任何帮助将不胜感激。

+0

检查:http://stackoverflow.com/questions/28377/iif-vs-if –

回答

2

当您使用IIF时,您评估所有表达式 - 真假以及假“分支”。

这意味着对于长度不超过150个字符的字符串,仍然会调用item.description.Substring(0, 150),从而导致错误。

也许有一个item.ShortDescription,它只能返回前150个字符,使用正常的IF/THEN

3

改用If(expression,truepart,falsepart)运算符:IIF运算符试图评估真假部分,而If运算符只尝试评估相关部分。

0

尝试使用:

检查:IIf() vs. If

If(item.description.Length > 150) Then 
    item.description.Substring(0, 150) 
Else 
    item.description 
End If 

OR,

If(item.description.Length > 150, item.description.Substring(0, 150), item.description)