Возможно, вы захотите проверить Получение представления из базы данных, а не из файла или Использование VirtualPathProvider для загрузки представлений ASP.NET MVC из DLL
Получениекод из моего предыдущего вопроса на эту тему.
В своем методе FileExists()
на другой странице вы заменяете тестовый код, который у меня есть, на некоторый код БД, который фактически проверяет, есть ли в virtualPath запись в вашембаза данных.Ваша база данных будет выглядеть примерно так:
Views --tablename
Path --view's virtual path
SomeOtherValue
... и ваш вызов будет выглядеть примерно так:
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);
}
}
А теперь мы изменим 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));
}
}
VirtualPath не должен соответствовать реальной файловой системе, если вы этого не хотите.Вы можете переопределить эту функциональность, реализовав эти два класса.
Затем вы можете зарегистрировать свой новый VirtualPathProvider в global.asax следующим образом:
HostingEnvironment.RegisterVirtualPathProvider(new DbPathProvider());
Надеюсь, это лучше ответит на ваш вопрос.