私が知りたいのは、レンダリング中にそのページのライフサイクルイベント(Page_Init、Page_Load)が呼び出されHttpContext
たときに(Page_Init、Page_Load)が呼び出されるように、レンダリングにパラメーターを挿入する手法があるかどうかです。UserControl
HttpContext.Current.Server.Execute()
このような手法を使用すると、動的レンダリングに特化しなくても、任意のUserControlにデータを挿入できます(たとえば、リモートサービスの呼び出しを介して)。ASPXページの静的コントロールであるかのようにロードされます。
このベースコードフラグメントから始めます。
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;
@ScottGu ViewManagerの例を見てきました。彼は、それぞれにデータメンバーを追加しUserControls
、コントロールがHTMLにレンダリングされる前に、リフレクションを使用してそのメンバーにデータソースを挿入します。
また、 Stefan Sedichが@ScottGuのViewManager<Control>
例を取り上げて、同じことを可能にするがリフレクションの必要性を回避するジェネリックを導出しているのを見ました。
たとえば、をレンダリングする前に、Request
オブジェクトまたはQueryString
HttpContextのにパラメータを追加できるようにしたいと思いますUserControl
。