web-dev-qa-db-ja.com

ASP.NETMVCはデータベースからRazorビューをロードします

ScottGuは、 データベースからRazorビューをロードする (コメントセクションを確認する)ができるはずだと述べました。

ありがとう。

20
pbz

ファイルではなくデータベースからビューをプルする または VirtualPathProviderを使用してDLLからASP.NET MVCビューをロードする を確認することをお勧めします。

この件に関する私の前の質問からコードを取ります。

別のページのFileExists()メソッドで、そこにあるテストコードを、virtualPathにデータベースにエントリがあるかどうかを実際にチェックするdbコードに置き換えます。データベースは次のようになります。

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を変更します

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は、必要がなければ実際のファイルシステムに対応している必要はありません。これらの2つのクラスを実装することにより、機能をオーバーライドできます。

次に、新しいVirtualPathProviderをglobal.asaxに次のように登録できます。

HostingEnvironment.RegisterVirtualPathProvider(new DbPathProvider());

これがあなたの質問にもっとよく答えることを願っています。

30
Buildstarted