c# - LoadControl 和 Page_Load 事件未触发

标签 c# asp.net pageload loadcontrol

大家好!我正在通过 Web 方法加载 UserControl,并使用 LoadControl 功能:

// create page, stringWriter
Page _page = new Page();
StringWriter _writer = new StringWriter();

// get popup control
Controls_Popup_ForumThreadForm _control = _page.LoadControl("~/Controls/Popup_ForumThreadForm.ascx") as Controls_Popup_ForumThreadForm;

然后我执行以下操作:

// add control to page
 _page.Controls.Add(_control);

HttpContext.Current.Server.Execute(_page, _writer, false);

问题是控件的 Page_Load 事件根本没有触发。如果我添加另一个函数,并在将控件添加到页面的 Controls 集合之前调用它,该函数将触发,但不会触发 Page_Load 事件。

有什么想法吗,伙计们?谢谢大家!

最佳答案

据我所知,动态呈现控件时无法执行事件。但我有一个渲染用户控件的技巧。

我使用一个函数来呈现一个用户控件,该控件采用用户控件的物理路径和一个属性列表。我在用户控件中定义了一个特殊属性,它可以像一个方法,当我设置它时运行我的自定义代码。这是渲染函数:

public static string RenderUserControl(string path, List<KeyValuePair<string, object>> properties)
    {
        Page pageHolder = new Page();
        UserControl viewControl = (UserControl)pageHolder.LoadControl(path);
        viewControl.EnableViewState = false;
        Type viewControlType = viewControl.GetType();
        foreach (var pair in properties)
        {
            PropertyInfo property = viewControlType.GetProperty(pair.Key);
            if (property != null)
            {
                property.SetValue(viewControl, pair.Value, null);
            }
        }
        HtmlForm f = new HtmlForm();

        f.Controls.Add(viewControl);

        pageHolder.Controls.Add(f);
        StringWriter output = new StringWriter();
        HttpContext.Current.Server.Execute(pageHolder, output, false);
        return (output.ToString());
    }

在您需要呈现的用户控件中定义一个属性,例如 RunMyCode 设置您想要的任何属性,最后添加您定义的特殊属性。

data.Add(new KeyValuePair<string, object>("RunMyCode", SomeDataOrNothing));

然后在用户控件的呈现事件中,您可以检查 RunMyCode 属性的值,如果已设置,则手动调用事件通常会引发的方法。

关于c# - LoadControl 和 Page_Load 事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1505148/

相关文章:

c# - 更改 WPF ListViewItem 的选择颜色

c# - 来自字符串值的通用类型

c# - 在 C# 中禁用寻呼机模板上的图像按钮

asp.net - web.config 不转发到非 .aspx 页面上的 404 错误页面

jquery - 单击后静态 'hover-state'?对于基于部分的网站

javascript - 取消页面加载时的 FancyBox

c# - 系统.ArgumentNullException : Value cannot be null

c# - Linq 中不区分大小写的 "contains"

c# - 异步库调用相互依赖又如何处理?

javascript - React - 等待页面加载的正确方法?