0

我正在使用 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
4

1 回答 1

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)那里使用了。

于 2011-04-07T11:36:54.387 回答