1

を使用して、文字列の末尾から文字を削除しようとしています.tostring.remove(n)。ステートメントの下のコードでIIf、文字列が ISNullOrEmpty であることを確認し、 or を返しTrueますFalsetrueの文字列が aspx ページに配置されて返された場合""(これは正常に動作します)、IsNullOrEmpty が を返したときにトリガーされる 2 番目の部分で問題が発生します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")))%>

データバインダーがデータを描画しているデータベース テーブルでは、NULL が許可されます。これは、特定のレコードに 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 に答える