Вытащить представление из базы данных, а не из файла
Можно ли загрузить представление из базы данных, а не из файла на диске? Это не обязательно должна быть база данных, это может быть любая строка.
Я думаю, что задал этот вопрос слишком рано... Я все еще жду каких-либо ответов, но сначала я обязательно проведу еще несколько исследований.
редактировать
Поэтому я написал быстрый пример, который делает то, что я хочу - в точку. Я буду публиковать обновления, как я получаю все работает должным образом.
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 & my DbVirtualFile
возвращенный файл анализируется и выводится как ожидалось. (Например, если бы я положил <%:DateTime.Now.ToString()%>
) - но это не так, когда я добавляю тесты, а база возвращает, просто выводит буквальную строку того, что находится в моем DbVirtualFile (боже, надеюсь, это имеет смысл) - есть какие-нибудь мысли там?
окончательный
Оно работает. Я просто не добавил наследство на страницу, которую я тестировал. В этом случае: @inherits System.Web.Mvc.WebViewPage<dynamic>
Надеюсь, что это помогает кому-то еще, пытающемуся сделать то же самое.