Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在带有服务器控件的页面上使用LoadControl_C#_Asp.net - Fatal编程技术网

C# 在带有服务器控件的页面上使用LoadControl

C# 在带有服务器控件的页面上使用LoadControl,c#,asp.net,C#,Asp.net,我正在尝试创建一个可以通过电子邮件发送的用户控件模板 在实用程序类中,我有一个包含以下代码的方法: StringBuilder sb = new StringBuilder(); Page p = new Page(); UserControl ctrl = (UserControl)p.LoadControl("~/EmailTemplates/OrderConfirmation.ascx"); StringWriter sw = new StringWriter(sb); Html32Tex

我正在尝试创建一个可以通过电子邮件发送的用户控件模板

在实用程序类中,我有一个包含以下代码的方法:

StringBuilder sb = new StringBuilder();
Page p = new Page();
UserControl ctrl = (UserControl)p.LoadControl("~/EmailTemplates/OrderConfirmation.ascx");
StringWriter sw = new StringWriter(sb);
Html32TextWriter htw = new Html32TextWriter(sw);

ctrl.RenderControl(htw);

这可以正确地写入用户控件文本,但是如果我想在控件页面内使用服务器控件(如listview),则永远不会计算listview。似乎只计算内联代码块。如何解决这个问题?

您应该将控件添加到页面并执行页面:

    var page = new FormlessPage();
    var ctrl = (UserControl)page.LoadControl("~/EmailTemplates/OrderConfirmation.ascx");

    page.Controls.Add(ctl);
    StringWriter writer = new StringWriter();
    HttpContext.Current.Server.Execute(page, writer, false);
    return writer.ToString();
无格式页面看起来就像:

public class FormlessPage : Page
{
    public override void VerifyRenderingInServerForm(Control control)
    {
    }
}
它允许您的控件在不使用
包装器的情况下拥有输入元素


此方法将调用页面生命周期方法并很好地绑定表单元素。

您可以使用公共函数(也称为ProcessLoad),而不是page_Load函数,并在加载控件后立即调用它。这样,您也可以将参数传递给您的用户控件。

您可以粘贴一些代码,向我们展示控件的外观吗?因为它应该很好用…谢谢你…太好了。这是令人沮丧的一天。你可以这样执行页面,这很有趣。@Nick:不客气。我正在做类似的事情,通过将用户控件切换到“只读”模式,我重新使用用户控件来构建HTML报告。我记得我花了数小时试图构建或跟踪解决方案。很高兴我能帮忙!