以编程方式呈现控件(使用LoadControl),同时附加页面生命周期
本文关键字:周期 生命 方式呈 编程 控件 LoadControl 使用 | 更新日期: 2023-09-27 17:58:44
我正试图使用LoadControl
在代码中获得一个自定义控件,用于编程呈现。但是,我注意到我的自定义控件的OnInit
方法没有被调用我是不是错过了重要的一步
//Loading the control
Page h = HttpContext.Current.Handler as Page;
UserControl userControl = (UserControl)h.LoadControl(pathToControl);
h.Controls.Add((Control)userControl);
//Rendering the control
StringWriter stringWriter = new StringWriter();
HtmlTextWriter writer = new HtmlTextWriter((TextWriter) stringWriter);
userControl.RenderControl(writer);
var result = stringWriter.ToString();
这就是上面的代码被称为的地方
[ScriptService]
public partial class Ajax : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static object AjaxMethod(string productCode) {
//here...
}
}
因此,您正在对服务器进行PageMethods调用,并希望为自定义控件更新流式返回标记,这就是它的样子。PageMethods不执行生命周期,因此它永远不会激发OnInit事件处理程序。人们使用JQuery或HTTP处理程序使用了同样的技术,下面是他们如何做到这一点的一些例子:
- 如何使用泛型处理程序加载用户控件
- http://weblogs.asp.net/sanjeevagarwal/archive/2008/07/22/Dynamically-create-ASP.NET-user-control-using-ASP.NET-Ajax-and-Web-Service.aspx