我有以下功能:
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.
我该如何纠正这种情况?
答案 0 :(得分:2)
如果检查,您在第一次出现逻辑错误。
Not Nothing
总是评估为true。所以第一个语句基本上编译为:
If IsDBNull(path) Or True Then
总是如此。你的if语句应该是这样的:
If Not IsDBNull(path) And path Is Not Nothing Then
答案 1 :(得分:1)
我不知道为什么你同时使用IsDBNull
和Nothing
使用AndAlso,如果之前为假,则不会检查下一部分
首先检查路径以防止异常:
If path IsNot Nothing AndAlso IsDBNull(path) = False Then
'do what ever you want to do
End If
答案 2 :(得分:0)
使用
If Not String.IsNullOrEmpty(path) Then
因为你需要处理空字符串。您应该传递一个String,而不是一个通用的Object。另外,你不能Or Not Nothing
。你必须做Not IsDBNull(path) And Not path Is Nothing
。