2013-01-19 51 views
1

我試圖使用.tostring.remove(n)從字符串的末尾去除字符。代碼低於IIf聲明確認該字符串是ISNullOrEmpty並返回TrueFalse。如果true返回""字符串被放置在aspx頁面(這工作正常),問題出現在第二部分,當IsNullOrEmpty返回False時觸發。InLine IIF Expression&DataBinder.Eval未按預期方式運行

在一個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")))%> 

的數據庫表中的DataBinder的被拉伸它的數據來自NULLS,只有在任何給定記錄存在NULL或空字符串時纔會發生。

請幫忙,這讓我瘋狂!

回答

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 

在這種情況下,你會看到真假兩寫入到輸出窗口。

我們通過使用iif引入了很多問題,我們禁止在我們的應用程序中使用它。

如果切換到傳統的if then else條款,您將會好得多。

+0

很高興你告訴我這個,我會花更多的時間試圖理解爲什麼當字符串不夠長時,它試圖執行那部分代碼.... –