ASP.NET MVC carica Razor view from database

ScottGu ha detto che dovremmo essere in grado di caricare una vista Razor da un database (controllare la sezione commenti), quindi qualcuno ha un esempio su come farlo?

Grazie.

Potrebbe essere necessario selezionare Estrazione di una vista da un database anziché da un file o Utilizzo di VirtualPathProvider per caricare le viste MVC ASP.NET dalle DLL

Prendendo il codice dalla mia precedente domanda sull’argomento.

Nel tuo metodo FileExists() sull’altra pagina sostituisci il codice di prova che ho lì con un codice db che controlla effettivamente se VirtualPath ha una voce nel tuo database. Il tuo database sarà simile a qualcosa:

 Views --tablename Path --view's virtual path SomeOtherValue 

… e la tua chiamata sarebbe quindi qualcosa di simile

 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); } } 

E ora modifichiamo 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)); } } 

Il virtualPath non deve corrispondere a un vero filesystem se non lo si desidera. È ansible sovrascrivere la funzionalità implementando queste due classi.

È quindi ansible registrare il nuovo VirtualPathProvider nel global.asax in questo modo

 HostingEnvironment.RegisterVirtualPathProvider(new DbPathProvider()); 

Spero che questo risponda meglio alla tua domanda.