我VirtualPathProvider
用来从 SQL Server 表返回虚拟页面。这是工作 pk,我的VirtualPathProvider
类文件中的代码如下。
我遇到的问题是,当我更改数据库中保存的虚拟页面数据(标题或页面文本)时,此更改不会显示在输出的页面上,因为原始页面已被缓存。
我已经阅读了一些关于将 GetCacheDependancy 添加到 VirtualPathProvider 类的文章,并且我尝试实现了几个示例,但原始页面仍然被缓存和显示。
我还尝试在虚拟页面 ( Response.AddCacheItemDependency("Pages")
) 的页面加载中添加一些代码并编辑 global.asax:
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs on application startup
HttpContext.Current.Cache.Insert("Pages", DateTime.Now, Nothing, _
System.DateTime.MaxValue, System.TimeSpan.Zero, _
System.Web.Caching.CacheItemPriority.NotRemovable, _
Nothing)
以防止缓存。但没什么用。
所以我要通过 VirtualPathProvider 类文件进行一些更改,以防止这些缓存问题。谢谢你尽你所能的帮助!
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
Imports System.Web.UI.MobileControls
Imports System.Collections.Generic
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("LIQUIDConnectionString").ConnectionString
Dim cnn As New SqlConnection(strConn)
cnn.Open()
Dim cmd As New SqlCommand()
cmd.Connection = cnn
cmd.CommandText = "select count(*) from tbl_VirtualFiles where virtualpath='" & virtualPath & "'"
Dim retval As Object = cmd.ExecuteScalar()
cnn.Close()
Dim i As Integer = Convert.ToInt32(retval)
If i <= 0 Then
'important as if no virtual file it looks for physical file
Return Previous.FileExists(virtualPath)
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