pbz*_*pbz 20 asp.net-mvc razor
ScottGu提到我们应该能够从数据库加载一个Razor视图(查看评论部分),那么有没有人有一个如何做到这一点的例子?
谢谢.
Bui*_*ted 30
您可能想要检查从数据库而不是文件中拉取视图或使用VirtualPathProvider从DLL加载ASP.NET MVC视图
从我之前关于这个主题的问题中获取代码.
在FileExists()
另一个页面上的方法中,用一些db代码替换我在那里的测试代码,这些代码实际上检查虚拟路径是否在数据库中有一个条目.您的数据库看起来像:
Views --tablename
Path --view's virtual path
SomeOtherValue
Run Code Online (Sandbox Code Playgroud)
...然后你的电话就像是
public class DbPathProvider : VirtualPathProvider {
public DbPathProvider() : base() {
}
public override bool FileExists(string virtualPath) {
Database db = new Database();
return db.Views.Any(w => w.Path == virtualPath);
}
public override VirtualFile GetFile(string virtualPath) {
return new DbVirtualFile(virtualPath);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我们修改DbVirtualFile
public class DbVirtualFile : System.Web.Hosting.VirtualFile {
public DbVirtualFile(string path) : base (path) {
}
public override System.IO.Stream Open() {
Database db = new Database();
return new System.IO.MemoryStream(
db.Views.Single(v => v.Path == this.VirtualPath));
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不想要虚拟路径,则虚拟路径不必与真实文件系统对应.您可以通过实现这两个类来覆盖功能.
然后,您可以在global.asax中注册新的VirtualPathProvider
HostingEnvironment.RegisterVirtualPathProvider(new DbPathProvider());
Run Code Online (Sandbox Code Playgroud)
我希望这能更好地回答你的问题.
归档时间: |
|
查看次数: |
24149 次 |
最近记录: |