如何解决从数据库而不是从文件中提取视图
是的,但是您必须创建一些新的提供程序。除了嵌入式文件,这是一个基本相同的问题。这是一个完全可以满足您需求的示例。
解决方法
是否可以从数据库而不是磁盘上的文件加载视图?它不一定必须是数据库,也可以是任何字符串。
我想我提这个问题还为时过早…我仍然期待任何答案,但是我一定会首先做更多研究。
编辑
所以我写了一个快速样本,可以满足我的要求。我会在一切正常运行时发布更新。
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>
希望这可以帮助其他尝试做同样事情的人。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。