ScottGu mencionó que deberíamos poder load a Razor view from a database (consulte la sección de comentarios), ¿alguien tiene un ejemplo de cómo hacerlo?carga de ASP.NET MVC Razor vista desde la base de datos
Gracias.
ScottGu mencionó que deberíamos poder load a Razor view from a database (consulte la sección de comentarios), ¿alguien tiene un ejemplo de cómo hacerlo?carga de ASP.NET MVC Razor vista desde la base de datos
Gracias.
Es posible que desee comprobar Pulling a View from a database rather than a file o Using VirtualPathProvider to load ASP.NET MVC views from DLLs
Tomando el código de mi pregunta anterior sobre el tema.
En su método FileExists()
en la otra página reemplaza el código de prueba que tengo allí con algún código de base de datos que realmente verifique si virtualPath tiene una entrada en su base de datos. Su base de datos sería algo como:
Views --tablename
Path --view's virtual path
SomeOtherValue
... y su llamada sería entonces algo así como
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);
}
}
Y ahora modificar el 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));
}
}
El virtualPath no lo hace tiene que corresponderse con un sistema de archivos real si no lo desea. Puede anular la funcionalidad implementando estas dos clases.
entonces se puede inscribir su nuevo VirtualPathProvider en el Global.asax al igual que
HostingEnvironment.RegisterVirtualPathProvider(new DbPathProvider());
espero que este mejor responda a su pregunta.
Tal vez me falta algo, pero en el tutorial que la solución apunta a (http://www.umbraworks.net/bl0g/rebuildall/2009/11/17/ASP_NET_MVC_and_virtual_views) la condición es tener un archivo real en disk (/View/Pages/Test.aspx) y solo proporciona el "llenado". Estoy buscando una solución que me permita especificar toda la página. – pbz
pregunta actualizada en base a confusión en cuanto a los caminos virtuales – Buildstarted
que estoy trabajando con un ejemplo en este momento que no utiliza una base de datos. En FileExists compruebo "/View/Home/Test.cshtml" (mi archivo virtual) y en el método Open devuelvo el nuevo MemoryStream (Encoding.ASCII.GetBytes ("
Hi
")); Cuando hago esto, aparece "Directory '[..] \ View \ Home' no existe. No se pudo iniciar la monitorización de los cambios de archivos". ¿Alguna idea? ¡Gracias por tu ayuda! – pbz