2010-03-26 79 views
1

我想使用ascx作爲模板,並以編程方式呈現它,使用生成的html作爲ajax方法的返回值。呈現用戶控件ascx

Page pageHolder = new Page(); 
MyUserControl ctlRender = (MyUserControl)pageHolder.LoadControl(typeof(MyUserControl),null); 

pageHolder.Controls.Add(ctlRender); 
System.IO.StringWriter swOutput = new System.IO.StringWriter(); 
HttpContext.Current.Server.Execute(pageHolder, swOutput, false); 
return swOutput.ToString(); 

這一切都會執行,並且用戶控件的Page Load事件觸發,但StringWriter始終爲空。我在其他例子中看到過類似的代碼,我錯過了什麼?

+0

你有沒有解決這個問題?我也得到空字符串。 – RoboJ1M 2012-09-20 12:22:31

回答

0

你總是要使用像this.Controls.Add(TemplateControl.LoadControl(」 〜/ PathTo/YourControl.ascx「)

原因是,沒有類型的內部映射到那裏ascx文件(只有其他wa y周圍)。所以這意味着如果初始化新的YourControl(),它將不會執行你在ascx部分定義的任何內容。如果你有

protected override void protected override void Render(HtmlTextWriter output) { 
    output.WriteLine("Test"); 
} 

這會給你「測試」的地方,你的控制。