无页面渲染控制

我目前正在使用内部框架。 这一切都很棒,但框架不使用aspx页面,它使用Response.Write呈现页面。 我遇到的问题是我需要在页面上使用rad控件,所以我需要做的就是生成rad控件以获取HTML代码,以便将其转储到页面上。 这可能吗? 我已经尝试创建一个Page对象来使其工作,但它不起作用。 似乎在调用页面时,它正在进行其他一些初始化。 我也尝试将HttpContext.Current.Handler强制转换为页面,但这不起作用,因为它们使用的是另一个类,而不是System.Web.UI.Page来处理请求。

在这一点上,我不太确定还有什么可以尝试。 如果我可以模仿Page创建类,那就太棒了。 有没有人知道正确创建和初始化Page对象的确切步骤?

希望这是有道理的……如果没有,我会尽量让它更容易理解。

谢谢!

更新

只是想给你我正在玩的代码。 希望这会告诉你我想做什么:

这是有效的:

HtmlForm f = new HtmlForm(); RadEditor re = new RadEditor(); f.ID = "form1"; this.Page.Controls.Add(f); re.ID = "rdControl"; StringBuilder sb = new StringBuilder(); StringWriter tw = new StringWriter(sb); HtmlTextWriter hw = new HtmlTextWriter(tw); //Page p = new Page();//(Page)HttpContext.Current.Handler; //HtmlForm f = new HtmlForm(); //p.Controls.Add(f); f.Controls.Add(re); 

这不起作用:

 HtmlForm f = new HtmlForm(); RadEditor re = new RadEditor(); f.ID = "form1"; Page p = new Page(); p.Controls.Add(f); re.ID = "rdControl"; StringBuilder sb = new StringBuilder(); StringWriter tw = new StringWriter(sb); HtmlTextWriter hw = new HtmlTextWriter(tw); //Page p = new Page();//(Page)HttpContext.Current.Handler; //HtmlForm f = new HtmlForm(); //p.Controls.Add(f); f.Controls.Add(re); 

理想情况下,我想让第二个在某种程度上工作,所以我可以生成代码。 抱歉这个烂摊子。 这是我的测试代码。

更新

所以我想到了,我想我知道问题在哪里。 控件试图访问一堆未包含在dll中的文件,如语言文件,样式,js文件等。我认为问题可能是当我创建一个新的Page实例时,它不知道该页面引用所有资源的位置。 有没有办法将页面设置为“虚拟”URL? 现在我正在玩这个代码:

 HttpContext context = new HttpContext(new HttpRequest(string.Empty, "http://localhost:2090/default.aspx", string.Empty), new HttpResponse(null)); 

您可以尝试RenderControl方法,该方法写入HtmlTextWriter

 var stringWriter = new StringWriter(); var htmlWriter = new HtmlTextWriter(stringWriter); myControl.RenderControl(htmlWriter); var s = stringWriter.ToString(); 

经过大量的研究,我设法找出了我遗漏的内容来生成页面。 显然有一个函数,p.DesignerInitialize(),用于初始化页面。 一旦调用它,它就会生成页面,并且可以渲染控件。 这是我正在使用的新function:

 public string RenderRad() { StringBuilder sb = new StringBuilder(); StringWriter tw = new StringWriter(sb); HtmlTextWriter hw = new HtmlTextWriter(tw); MyPage p = new MyPage(); p.DesignerInitialize(); HtmlForm f = new HtmlForm(); p.Controls.Add(f); f.Controls.Add(re); re.RenderControl(hw); return sb.ToString(); } 

我还有一个inheritance自Page的类,它将禁用对表单中所有控件的检查:

  public partial class MyPage : System.Web.UI.Page { public override void VerifyRenderingInServerForm(Control control) { return; } }