从数据库而不是文件中提取视图

是否可以从数据库而不是从磁盘上的文件加载视图? 它不一定是数据库,可以是任何字符串。

我想我太快问了这个问题……我仍然期待任何答案,但我肯定会先做一些研究。

编辑

所以我写了一个快速的样本,它做了我想要的 – 一点。 我会发布更新,因为我让一切正常。

public class DbPathProvider : VirtualPathProvider { public DbPathProvider() : base() { } public override bool FileExists(string virtualPath) { if (virtualPath.StartsWith("/test") || virtualPath.StartsWith("~/test")) return true; return base.FileExists(virtualPath); //deal with this later } public override VirtualFile GetFile(string virtualPath) { if (virtualPath.StartsWith("/test") || virtualPath.StartsWith("~/test")) return new DbVirtualFile(virtualPath); return base.GetFile(virtualPath); //deal with this later } public class DbVirtualFile : System.Web.Hosting.VirtualFile { public DbVirtualFile(string path) : base (path) { //deal with this later } public override System.IO.Stream Open() { return new System.IO.MemoryStream(System.Text.ASCIIEncoding.ASCII.GetBytes("this is a test")); } } } 

更新

在玩完之后我发现了一些有趣的东西。 如果我从FileExists()GetFile()方法中删除return base...并且只返回true和我的DbVirtualFile ,则会解析返回的文件并按预期输出。 (例如,如果我把 ) – 但是当我添加测试并且基础返回它时它不会输出我的DbVirtualFile中的任何内容的文字字符串(我希望上帝这是有道理的) – 任何想法?

最后

有用。 我只是没有将inheritance添加到我正在测试的页面。 在这种情况下: @inherits System.Web.Mvc.WebViewPage

希望这有助于其他人尝试做同样的事情。

是的,你必须创建一些新的提供商。 这是一个基本相同的问题,除了嵌入式文件。 这是一个完全符合您要求的示例。