ScottGu упомянул, что мы должны загружать представление Razor из базы данных (см. раздел комментариев), так что у кого-нибудь есть пример о том, как это сделать?
Спасибо.
ScottGu упомянул, что мы должны загружать представление Razor из базы данных (см. раздел комментариев), так что у кого-нибудь есть пример о том, как это сделать?
Спасибо.
Возможно, вы захотите проверить Вытягивание представления из базы данных, а не файла или Использование VirtualPathProvider для загрузки ASP.NET MVC из DLL
Взятие кода из моего предыдущего вопроса по этому вопросу.
В вашем методе FileExists()
на другой странице вы заменяете тестовый код, который у меня есть, с некоторым кодом db, который на самом деле проверяет, имеет ли virtualPath запись в вашей базе данных. Ваша база данных будет выглядеть примерно так:
Views --tablename
Path --view 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());
Надеюсь, это лучше ответит на ваш вопрос.