2011-08-16 8 views
2

UserControlのコードをデータベーステーブルに格納したり、動的にコンパイルしたり、そこからロードする方法はありますか?私はUserControlの完全なコードを含むデータベースから文字列を取得し、ページに追加することを意味ですか?Web UserControl ascxとコードをデータベースに保存してそこからロードできますか?

+1

私の脳は溶けています:) –

+0

@pstなぜですか?私は現在Sharepointで作業しており、データベースからすべてのコードも取得します。だから何とかできなければならない。 – teenup

+0

データベースからユーザーコントロールをロードします...?私は彼らがControlTemplatesにいると確信していました... –

答えて

1

いくつかのアイデア:

(代わりに、コントロールの)ページ全体で

    のHttpHandlerと一時ファイル
  1. 利用UserControl.LoadControl()と
  2. 使用UserControl.LoadControl()
  3. 使用BuildManager.CreateInstanceFromVirtualPath()オプション1:一時ファイル(最も簡単)

    1. Webアプリケーションが書き込むディレクトリを作成します。 ~/tmp/(およびWebアプリケーションがそのディレクトリに権限を作成 & を変更与える)
    2. 保存ユーザーコントロールの内容一時ファイルへ:

      string userControlContents = /* get user control contents from database */; 
      string path = Server.MapPath("~/tmp/2011081612332423.ascx"); 
      System.IO.File.WriteAllText(path, userControlContents); 
      
    3. ユーザーコントロールをロードします。

      Control c = UserControl.LoadControl("~/tmp/2011081612332423.ascx") 
      
    4. ユーザーコントロールを目的のページに追加します。

      this.Controls.Add(c); 
      

    オプション2:のHttpHandler

    1. IDによってユーザーコントロールの内容を取得し、Responseストリーム
      • にデータベースからの生のコンテンツを出力するページまたはのHttpHandlerを実装これは、UserControl.LoadControl()がおそらくResponseストリームを気にしないので、で動作しない可能性があります。
    2. その後オプション1のようにコントロールを読み込む:

      Control c = UserControl.LoadControl("~/UserControlFromDB.ascx?id=392") 
      
      • ファイル名 "UserControlFromDB.ascx" は常に同じであるため、ASP.NETのJITキャッシングが(のみid=NNNを壊すかもしれません変更)。 URLの書き換えはこれを回避することができます。

    オプション3:ページをコンパイルするだけではなくコントロール

    BuildManager.CreateInstanceFromVirtualPath()が仮想パスからASP.NETでPageをコンパイルします。したがって、データベース全体にページを格納し、動的にコンパイルすることができます。


    免責事項:私はコントロールまたはデータベース内のページを保存することはお勧めしません。保守、デバッグ、およびセキュリティコストが増加します。

関連する問題