Jon*_*ock 48 .net html c# user-controls
如果我创建一个UserControl并向其添加一些对象,我如何获取它将呈现的HTML?
恩.
UserControl myControl = new UserControl();
myControl.Controls.Add(new TextBox());
// ...something happens
return strHTMLofControl;
Run Code Online (Sandbox Code Playgroud)
我想将新构建的UserControl转换为HTML字符串.
aza*_*arp 57
您可以使用渲染控件Control.RenderControl(HtmlTextWriter).
喂StringWriter到HtmlTextWriter.
喂StringBuilder到StringWriter.
生成的字符串将在StringBuilder对象内.
以下是此解决方案的代码示例:
StringBuilder myStringBuilder = new StringBuilder();
TextWriter myTextWriter = new StringWriter(myStringBuilder);
HtmlTextWriter myWriter = new HtmlTextWriter(myTextWriter);
myControl.RenderControl(myWriter);
string html = myTextWriter.ToString();
Run Code Online (Sandbox Code Playgroud)
Ben*_*Ben 32
//render control to string
StringBuilder b = new StringBuilder();
HtmlTextWriter h = new HtmlTextWriter(new StringWriter(b));
this.LoadControl("~/path_to_control.ascx").RenderControl(h);
string controlAsString = b.ToString();
Run Code Online (Sandbox Code Playgroud)
the*_*erm 14
UserControl uc = new UserControl();
MyCustomUserControl mu = (MyCustomUserControl)uc.LoadControl("~/Controls/MyCustomUserControl.ascx");
TextWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
mu.RenderControl(hw);
return tw.ToString();
Run Code Online (Sandbox Code Playgroud)
迟了七年,但值得分享.
普遍接受的解决方案- StringBuilder成StringWriter成HtmlWriter成RenderControl-好.但是有一些陷阱,我不幸在试图做同样的事情时跑了过来.如果某些控件不在a中Page,则会抛出错误,如果某些控件不在<form>with中,则会抛出错误runat="server".ScriptManager控件展示了这两种行为.
我最终在这里找到了解决方法.它的要点基本上只是在做作者工作之前实例化一个新的页面和表单:
Page page = new Page();
page.EnableEventValidation = false;
HtmlForm form = new HtmlForm();
form.Name = "form1";
page.Controls.Add(form1);
MyControl mc = new MyControl();
form.Controls.Add(mc);
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter writer = new HtmlTextWriter(sw);
page.RenderControl(writer);
return sb.ToString();
Run Code Online (Sandbox Code Playgroud)
不幸的是,这给你提供了比实际需要更多的标记(因为它包含虚拟形式).而ScriptManager仍然会因为某些神秘的原因而失败,我还没有感到困惑.老实说,这是一个很大的麻烦,不值得做; 毕竟,在代码隐藏中生成控件的全部意义在于,您无需使用标记.
| 归档时间: |
|
| 查看次数: |
55182 次 |
| 最近记录: |