0

私は次の機能を持っています:

Public Shared Function imageExists(ByVal path As Object) As Boolean
                If IsDBNull(path) = False Or Not path Is Nothing Then
                    Dim pathString As String = Convert.ToString(path)
                    If Exists(HttpContext.Current.Server.MapPath(path)) Then
                        Return True
                    Else
                        Return False
                    End If
                Else
                    Return False
                End If

            End Function

このイメージ コントロールの visible プロパティによって呼び出されます。

<asp:Image ID="img_SmallImage" runat="server" ImageUrl='<%# "~/Content/Images/Exclusive/" + Eval("trip_SmallImage") %>' Visible='<%# OnTheMain.Images.Validation.imageExists(Eval("trip_SmallImage"))%>' />

その部分に対して何をしようとしてもIf IsDBNull、それを無視してコードを実行するか、次のようなエラーを返しますConversion from type 'DBNull' to type 'String' is not valid.

どうすれば状況を修正できますか?

4

3 に答える 3

2

最初のifチェックに論理エラーがあります。

Not Nothing常に true と評価されます。そのため、最初のステートメントは基本的に次のようにコンパイルされます。

If IsDBNull(path) Or True Then

これは常に真実です。if ステートメントはおそらく次のようになります。

If Not IsDBNull(path) And path Is Not Nothing Then
于 2013-01-26T01:16:05.197 に答える
1

とにかくIsDBNullとの両方を使用している理由がわかりませんNothing

AndAlsoを使用します。前の部分が false の場合、次の部分はチェックされません。

例外を防ぐために、最初にパスを確認してください。

        If path IsNot Nothing AndAlso IsDBNull(path) = False Then
        'do what ever you want to do
    End If

参考までに、 OrElse は に対して同じ機能を実行します。Or私にとっては、デフォルトでこの短絡論理演算子を使用しています これに関する私の質問をここで読んでください

于 2013-01-26T01:33:53.663 に答える
0

使用する

If Not String.IsNullOrEmpty(path) Then

空の文字列を処理する必要があるためです。一般的なオブジェクトではなく、文字列を渡す必要があります。また、できませんOr Not Nothing。あなたがしなければならないでしょうNot IsDBNull(path) And Not path Is Nothing

于 2013-01-26T01:50:25.707 に答える