2011-04-07 52 views
0

我正在使用VirtualPathProvider從數據庫表中返回虛擬頁面,它的工作正常,但問題是,該網站不再識別頁面何時物理存在而不是被持有在虛擬頁面表中。asp.net VirtualPathProvider - 不再識別物理文件

當函數FileExists返回false時,調試物理頁面時頁面加載時出現下面的代碼,頁面加載失敗並且無法找到資源。

如何解決這個問題的任何提示將是偉大的!謝謝

Imports System.Data 
Imports System.Data.SqlClient 
Imports System.Configuration 
Imports System.Web 
Imports System.Web.Security 
Imports System.Web.UI 
Imports System.Web.UI.HtmlControls 
Imports System.Web.UI.WebControls 
Imports System.Web.UI.WebControls.WebParts 
Imports System.Web.Hosting 

Public Class DbVirtualPathProvider 
    Inherits VirtualPathProvider 
    Public Shared Sub AppInitialize() 
     Dim db As New DbVirtualPathProvider() 
     HostingEnvironment.RegisterVirtualPathProvider(db) 
    End Sub 

    Public Overrides Function FileExists(ByVal virtualPath As String) As Boolean 
     Dim strConn As String = ConfigurationManager.ConnectionStrings("connstr").ConnectionString 
     Dim cnn As New SqlConnection(strConn) 
     cnn.Open() 
     Dim cmd As New SqlCommand() 
     cmd.Connection = cnn 
     cmd.CommandText = "select count(*) from webforms where virtualpath='" & virtualPath & "'" 
     Dim retval As Object = cmd.ExecuteScalar() 
     cnn.Close() 
     Dim i As Integer = Convert.ToInt32(retval) 
     If i <= 0 Then 
      Return False 
     Else 
      Return True 
     End If 
    End Function 

    Public Overrides Function GetFile(ByVal virtualPath As String) As VirtualFile 
     Dim file As New DbVirtualFile(virtualPath) 
     If file.WebFormContent Is Nothing Then 
      Return Previous.GetFile(virtualPath) 
     Else 
      Return file 
     End If 
    End Function 
End Class 

回答

2

看看VirtualPathProvider.Previous財產。 MSDN表示Previous屬性獲取對編譯系統中先前註冊的VirtualPathProvider對象的引用。

所以,你應該修改一點點你的FileExists方法,如:

Dim i As Integer = Convert.ToInt32(retval) 
If i <= 0 Then 
    Return Previous.FileExists(virtualPath) 
Else 
    Return True 
End If 

GetFile方法不應該被修改,因爲你已經使用Previous.GetFile(virtualPath)那裏。

+0

非常感謝Alex解決了這個問題! – Steve 2011-04-07 13:12:21