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 に答える