这似乎是一个相当简单的问题,但我不断得到同样的例外,我不明白为什么。
我只能假设它与对VB.NET中子字符串如何工作的误解有关。
以下代码不断抛出ArgumentOutOfRange异常:
<%=Html.Encode(IIf(item.description.Length > 150, item.description.Substring(0, 150), item.description))%>
现在应该发生的是,如果item.description超过150个字符输出,则前150个输出整个字符串。问题是它不断尝试获取子字符串而不管if语句的结果长度。
非常感谢任何帮助。
答案 0 :(得分:3)
使用If(expression,truepart,falsepart)运算符:IIF运算符尝试计算true和false部分,而If运算符仅尝试计算相关部分。
答案 1 :(得分:2)
当你使用IIF
时,你会评估所有的表达式 - 真正的以及错误的“分支”。
这意味着对于长度不足150个字符的字符串,您仍然会调用item.description.Substring(0, 150)
,从而导致错误。
也许有item.ShortDescription
,只能使用普通IF/THEN
返回前150个字符。
答案 2 :(得分: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)