【发布时间】:2009-08-24 22:22:37
【问题描述】:
问题:是否可以在后端代码中(不是在后面的代码中,而是在实际的后端类中)渲染在 .aspx 或 .ascx 中定义的页面或控件,而无需使用 Load(path),而只需创建页面/控件类的实例?
我希望能够做到这一点(来自后端类而不是背后的代码):
MyControl myCtl = new MyApp.Views.Shared.MyControl();
String html = Util.ControlToString(myCtl); //I get an empty string & hidden errors
而不是这个
public static string ControlToString(string path)
{
Page pageHolder = new Page();
MyControl myCtl = (MyControl)pageHolder.LoadControl(path);
pageHolder.Controls.Add(myCtl);
StringWriter output = new StringWriter();
HttpContext.Current.Server.Execute(pageHolder, output, false);
return output.ToString();
}
详情: 在 Asp.net WebApp 中,我偶尔需要将用户控件 (.ascx) 或页面 (.aspx) 呈现为 HTML 字符串。当页面或控件从后面的代码继承时,它的类在我的后端代码中以智能感知显示,我可以创建一个实例并设置属性,而不会出现编译时或运行时错误。但是,当我尝试渲染页面或控件时,我总是得到一个空字符串,并且在检查时页面或控件显示抑制的内部渲染错误,除非我使用其物理文件路径加载页面或控件。
我认为关键问题与运行时编译 .aspx / .ascx 文件的时间和方式有关。我不想创建用户控件的预编译类库,因为这会使设计过程变得尴尬,我真的很喜欢 .aspx / .ascx 页面提供的设计器功能,所以我很想找到一种方法来使页面在解决方案中编译,以便它们像任何其他后端类一样可用,但仍然可以使用设计器创建。我希望两全其美 (1) 能够在设计器中编辑页面和控件,以及 (2) 创建实例并使用后端类设置它们的属性。
【问题讨论】:
标签: asp.net loadcontrol