2012-05-31 4 views
2

Я пытаюсь сохранить все элементы управления из одного WebForm с помощью сериализованного словаря (controlId - string, controlValue - string). Затем я хочу десериализовать этот Словарь и динамически заполнять элементы управления своими значениями.C# Call Event Handler Dynamic

Проблема в том, что некоторые из моих элементов управления имеют функцию AutoPostBack true, а также обработчики событий. Есть ли способ динамически вызывать эти обработчики событий? Я хочу избежать другого переключателя с помощью идентификатора элемента управления.

Ex:

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) ....... 

EDIT:

Давайте предположим, что у меня есть 10 различных форм. каждый из них имеет около 50 элементов управления. Я хочу добавить/отредактировать набор данных. Я стараюсь избегать таблиц в базе данных со столбцами для каждого элемента управления, поэтому я хочу использовать сериализацию.

+0

Все эти элементы управления и их значения доступны вам на обратной стороне в любом случае? – IrishChieftain

+0

Да ... Я извлекаю сериализованный словарь из базы данных, и я десериализую его ... –

ответ

0

Я нашел его позже ... я искал:

если (((TextBox) с) .AutoPostBack) (с, как IPostBackDataHandler) .RaisePostDataChangedEvent();

1

С моей точки зрения вы пытаетесь изобрести колесо. ASP.NET предоставляет класс WebUserControl, который может использоваться на разных страницах и работает как контейнер для набора элементов управления. Вы можете определить обработчики событий для этих элементов управления, и они будут вызваны соответствующим образом, независимо от того, на какой странице вы их используете.

Итак, я предлагаю вам использовать подход на основе WebUserControl без использования сериализации/десериализации. Это простое и эффективное решение.

+0

Эта форма/страница содержит множество элементов управления ... Я хочу сохранить их значения в базе данных, а затем загрузить их обратно, но без создания таблицы с столбцами для каждого поля ... –

+0

ОК, если это так, UserControl - это путь. Вы можете установить управляющие значения вручную, и события будут работать правильно :). Вы должны просто держать все свои элементы управления в UserControl. – platon

+0

k, я посмотрю –