gpt4 book ai didi

c# - LoadControl 和 Page_Load 事件未触发

转载 作者:太空狗 更新时间:2023-10-29 17:55:43 25 4
gpt4 key购买 nike

大家好!我正在通过 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/

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