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

时间:2012-05-31 12:57:40

标签: c# asp.net

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

问题是我的一些控件有AutoPostBack为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个控件。我想添加/编辑一组数据。我试图避免使用每个控件的列数据库中的表,这就是我想使用序列化的原因。

2 个答案:

答案 0 :(得分:1)

从我的观点来看,你正试图重新发明一个轮子。 ASP.NET提供了WebUserControl类,可以在不同的页面上使用它,并作为一组控件的容器。您可以为这些控件定义事件处理程序,无论您使用它们的页面如何,都将对它们进行适当调用。

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

答案 1 :(得分:0)

我后来发现了......我一直在寻找:

if(((TextBox)c).AutoPostBack)(c as IPostBackDataHandler).RaisePostDataChangedEvent();