C# 调用事件处理程序动态

本文关键字:动态 程序 事件处理 调用 | 更新日期: 2023-09-27 18:36:05

我正在尝试使用序列化的字典(controlId - string,controlValue - string)保存一个WebForm中的所有控件。接下来,我想反序列化该字典,并用控件的值动态填充控件。

问题是我的一些控件具有自动回发 true 和事件处理程序。有没有办法动态调用这些事件处理程序?我想避免通过控件的 id 进行另一个切换。

前任:

foreach (KeyValuePair<string, string> kvp in dict)
{
    Control c = findControlRecursive(Page, kvp.Key);
    if (c != null)
    {
        switch (c.GetType().Name)
        {
            case "TextBox":
                ((TextBox)c).Text = kvp.Value;
                if (((TextBox)c).AutoPostBack) .......

编辑:

假设我有 10 种不同的形式。 每个都有大约 50 个控件。我想添加/编辑一组数据。我尽量避免数据库中每个控件都有列的表,这就是我想使用序列化的原因。

C# 调用事件处理程序动态

在我看来,

你正在尝试重新发明一个轮子。 ASP.NET 提供了 WebUserControl 类,该类可以在不同的页面上使用,并用作一组控件的容器。 您可以为这些控件定义事件处理程序,无论您在哪个页面上使用它们,都将正确调用它们。

因此,我建议您使用基于 WebUserControl 的方法,而无需序列化/反序列化控件。 这是一个简单有效的解决方案。

我后来发现了它...我正在寻找:

if (((文本框)c)。AutoPostBack) (c as IPostBackDataHandler).RaisePostDataChangedEvent();