1

レンダリングにパラメータを挿入する手法がある場合、UserControlに利用できるように、ページライフサイクルイベント(Page_Init、Page_Load )がレンダリング中に呼び出されます(HttpContext.Current.Server.Execute()中)?特殊化されていない動的に作成されたUserControlへのパラメータ注入

このような手法は、動的レンダリングのために特殊化することなく、任意のUserControlにデータを注入できるようにします(リモートサービスへの呼び出しなど)。 ASPXページ上の静的コントロールと同じようにロードされます。このベースコード断片と

スタート:私は彼が彼のUserControlsのそれぞれにデータメンバを追加し、前にそのメンバーにデータソースを注入するためにリフレクションを使用しています@ScottGu ViewManagerの例を見てきました

Page page = new Page(); 
UserControl ctl = (UserControl)page.LoadControl(controlSpec); 
page.Controls.Add(ctl); 

// want to inject data into the control at this point 

StringWriter writer = new StringWriter(); 
HttpContext.Current.Server.Execute(page, writer, true); 
String renderedContent = writer.ToString(); 
return renderedContent; 

コントロールはHTMLにレンダリングされます。

また、Stefan Sedich'sは@ScottGuの例を取ります。ここでは、同じことを可能にするが、反射の必要性を避ける一般的なViewManager<Control>を派生させています。

たとえば、UserControlをレンダリングする前に、RequestオブジェクトまたはHttpContext内のQueryStringにパラメータを追加できます。

答えて

0

UserControlオブジェクトを継承するアプリケーション用の新しいコントロールベースクラスを作成すると、カスタムコントロールはユーザーコントロールではなくそのクラスに基づいていますか?その後、コントロールからアクセスできる基本クラスのコントロールにデータを注入するためのメソッドを作成できます。

public class DataDrivenUserControl : UserControl 
{ 
// implement stuff here 
} 

あなたのコントロールは、このクラスから

通常
DataDrivenUserControl ctl = (UDataDrivenUserControl)page.LoadControl(controlSpec); 
page.Controls.Add(ctl); 
ctl.InjectData(data);// or however you want to implement data injection methods 

を継承することができ、私は一つの機能のために推奨されるより多くの継承の深さをwoldn'tが、それはここでうまくいくかもしれません。

+0

あなたが示唆していることは、実行可能な解決策ですが、それは私には優しくないようです。さらに、私は避けようとしているUserControlを専門にする必要があります。 –

関連する問題