我目前正在使用一个内部框架。这一切都很棒,但是框架不使用aspx页面,它使用Response.Write呈现页面。我遇到的问题是,我需要在页面上使用rad控件,所以我需要做的就是生成rad控件来获取HTML代码,这样我就可以将其转储到页面上。这个是可能的吗?我尝试创建一个Page对象以使其正常工作,但它不起作用。似乎当一个页面被调用时,它正在做一些其他的初始化。我还尝试将HttpContext.Current.Handler转换为页面,但没有成功,因为它们使用的是另一个类,而不是System.Web.UI.Page来处理请求。
在这一点上,我不太确定还可以尝试什么。如果我能mimc页面创建类,那就太好了。有人知道正确创建和初始化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));发布于 2011-06-16 01:12:24
经过大量的研究,我设法找出了我在生成页面时遗漏了什么。显然,有一个初始化页面的函数p.DesignerInitialize()。一旦调用了它,它就会生成页面,并且可以在页面上呈现控件。下面是我正在使用的新函数:
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();
}我还有一个继承自Page的类,它将禁用对表单中所有控件的检查:
public partial class MyPage : System.Web.UI.Page
{
public override void VerifyRenderingInServerForm(Control control)
{
return;
}
}发布于 2011-06-15 00:09:51
您可以尝试使用RenderControl方法,该方法写入HtmlTextWriter
var stringWriter = new StringWriter();
var htmlWriter = new HtmlTextWriter(stringWriter);
myControl.RenderControl(htmlWriter);
var s = stringWriter.ToString();https://stackoverflow.com/questions/6346435
复制相似问题