2

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

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

4

2 回答 2

1

从我的角度来看,您正在尝试重新发明轮子。ASP.NET 提供了 WebUserControl 类,它可以在不同的页面上使用,并作为一组控件的容器。您可以为这些控件定义事件处理程序,无论您在哪个页面上使用它们,它们都会被适当地调用。

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

于 2012-05-31T13:04:14.180 回答
0

后来我找到了……我在找:

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

于 2012-07-12T06:02:16.003 回答