1

我想知道的是,是否有一种技术可以将参数注入到渲染中,以便在渲染期间(期间)调用其页面生命周期事件(Page_Init,Page_Load)时HttpContext可用?UserControlHttpContext.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示例,其中他向每个成员添加了一个Data 成员,UserControls并在控件呈现为HTML 之前使用反射将数据源注入该成员。

我还看到了Stefan Sedich对 @ScottGu 示例的看法,他派生了一个泛型ViewManager<Control>,它允许同样的事情,但避免了反射的需要。

例如,我希望能够在Request渲染.QueryStringUserControl

4

1 回答 1

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

通常我不会为一个函数推荐更多的继承深度,但它可能在这里工作。

于 2009-06-10T21:24:03.927 回答