gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:09:52 24 4
gpt4 key购买 nike

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

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

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)
{
}
}

它允许您的控件具有没有 <form> 的输入元素包装器。

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

关于c# - 在带有服务器控件的页面上使用 LoadControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5944076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com