2012-12-01 29 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)