ScottGuはload a Razor view from a database(コメント欄を参照)にできるはずだと言いました。ASP.NET MVC load Razorビューfromデータベース
ありがとうございました。
ScottGuはload a Razor view from a database(コメント欄を参照)にできるはずだと言いました。ASP.NET MVC load Razorビューfromデータベース
ありがとうございました。
あなたは、件名に私の以前の質問からコードを取るPulling a View from a database rather than a fileかUsing VirtualPathProvider to load ASP.NET MVC views from DLLs
チェックすることをお勧めします。
他のページのFileExists()
メソッドでは、私がそこに持っているテストコードを、virtualPathにデータベースにエントリがあるかどうかを実際に確認するいくつかのdbコードと置き換えます。 virtualPathにはない
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));
}
}
を
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
を変更 :あなたのデータベースは次のようになります本当のファイルシステムに対応していなければならない。これらの2つのクラスを実装することによって、機能をオーバーライドできます。あなたはそのように
HostingEnvironment.RegisterVirtualPathProvider(new DbPathProvider());
私は、これは、より良いあなたの質問に答える願うようにGlobal.asaxの中で、あなたの新しいVirtualPathProviderを登録することができます。
多分私は何かが不足しているかもしれませんが、チュートリアルで解決策(http://www.umbraworks.net/bl0g/rebuildall/2009/11/17/ASP_NET_MVC_and_virtual_views)を指しているのは、実際のファイルを置くことですディスク(/View/Pages/Test.aspx)を入力し、 "塗りつぶし"を入力します。私はページ全体を指定できる解決策を探しています。 – pbz
仮想パスに関する混乱に基づいて質問が更新されました – Buildstarted
私はデータベースを使用しないサンプルを使っています。 FileExistsでは "/View/Home/Test.cshtml"(私の仮想ファイル)をチェックし、Openメソッドでは新しいMemoryStream(Encoding.ASCII.GetBytes( "
こんにちは
")を返します。私がこれを行うと、 "ディレクトリ '[..] \ View \ Home'が存在しません。ファイルの変更の監視を開始できませんでした。何かご意見は?ご協力いただきありがとうございます! – pbz