问题:是否可以在后端代码中(不是在后面的代码中,而是在实际的后端类中)加载和呈现在 .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)使用后端类创建实例并设置它们的属性。