2009-06-11 3 views
0

У меня есть проблема, которая возникает, когда элементы управления загружаются в init, и это все равно не помогает мне получить надлежащее событие postback, запущенное вовремя.Проблема с обратной передачей для моего мастера загрузки пользовательского управления

Я пытаюсь создать богатый элемент управления мастером, который будет включать переключение, ссылки с описанием, полностью настраиваемые этапы, интеграцию подэтапов - с помощью динамической нагрузки управления, которая позволяет избежать способа загрузки asp.net.

Идея состоит в том, чтобы иметь на левой части навигации, на правом содержимом части или подшагах, которые запускаются с правой стороны и которые проходят по всей области.

Download source project

+0

Не глядя на код, вы загружаете эти элементы управления динамически? – epitka

ответ

0

Хорошо, я перечитываю этот вопрос, и вот что вы должны сделать. Вы должны повторно загрузить эти элементы управления при каждой обратной передаче, дать им всегда один и тот же идентификатор. Это можно сделать в Page_Init или в событии Page_Load. И, конечно же, вы должны повторно присоединить обработчики событий на каждом столбце.

0

Большое спасибо .. ну, я нашел ответ - id был проблемой, в методе управления нагрузкой. Я делал этот волшебник. Ну, теперь многое работает. Если кто-то заинтересован, чтобы увидеть, как же это работает .. Есть некоторые обновления:

public void LoadSplitViewControl(string path) 
{ 
    SwitchNavigationView(NavigationView.SplitView); 
    LastNavigationView = NavigationView.SplitView; 
    LoadControl(SplitControlLoader, path, "LoadedControlSplit"); 
} 

public void LoadSingleViewControl(string path) 
{ 
    SwitchNavigationView(NavigationView.SingleView); 
    LastNavigationView = NavigationView.SingleView; 
    LoadControl(SingleControlLoader, path, "LoadedControlSingle"); 
} 

public void LoadSingleViewControlAsClear(string path) 
{ 
    SwitchNavigationView(NavigationView.SingleView); 
    LastNavigationView = NavigationView.SingleView; 
    LoadControlAsClear(SingleControlLoader, path, "LoadedControlSingle"); 
} 

private void LoadControl(PlaceHolder holder, string path, string ID) 
{ 
    UserControl ctrl = (UserControl)Page.LoadControl(path); 
    ctrl.ID = ID; 
    LastControlPath = path; 
    holder.Controls.Clear(); 
    holder.Controls.Add(ctrl); 
} 

// как я с помощью шагов, загруженные элементы управления с помощью SplitView и субшагов управления с использованием единого взгляда иногда ViewState не будет действительно так ошибка будет сброшен, но вы можете решить это, используя LoadSingleViewControlAsClear, который будет загружаться ниже метода.

private void LoadControlAsClear(PlaceHolder holder, string path, string ID) 
{ 
    UserControl ctrl = (UserControl)Page.LoadControl(path); 
    ctrl.ID = ID; 
    LastControlPath = path; 
    ctrl.EnableViewState = false; 
    holder.Controls.Add(ctrl); 
} 

/другая классная идея, я использую для такого мастера, что я не использую ViewState, а скорее объект сеанса для сохранения значений, собранных за шагом. Мой ключ объекта сеанса генерируется аутентифицированным именем пользователя и pageguid - поэтому у вас может быть много загруженных страниц, и каждый из них будет обрабатывать другой объект сеанса./

public Guid PageGuid 
{ 
    get 
    { 
     if (PageGuidField.Value == "") 
     { 
      var _pageGuid = Guid.NewGuid(); 
      PageGuidField.Value = _pageGuid.ToString(); 
      return _pageGuid; 
     } 
     return new Guid(PageGuidField.Value); 
    } 
}