是否可以从数据库而不是从磁盘上的文件加载视图?它不一定是数据库,可以是任何字符串。
我想我过早地问过这个问题......我仍然期待任何答案,但我肯定会先做一些研究。
所以我写了一个快速的样本,做了我想做的事 - 在某一点上。我会发布更新,因为我可以正常工作。
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"));
}
}
}
玩完之后我发现了一些有趣的东西。如果我从return base...
和FileExists()
方法移除GetFile()
,只返回true&我的DbVirtualFile
解析了返回的文件,并按预期输出。 (例如,如果我放<%:DateTime.Now.ToString()%>
) - 但是当我添加测试并且基础返回时它不会输出我的DbVirtualFile中的任何内容的字符串(上帝,我希望这是有道理的) - 任何想法在那里?
有效。我只是没有将继承添加到我正在测试的页面。在这种情况下:@inherits System.Web.Mvc.WebViewPage<dynamic>
希望这有助于其他人尝试做同样的事情。