2011-04-07 53 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