Проблема обратной передачи для мастера загрузки пользовательских элементов управления - PullRequest
0 голосов
/ 11 июня 2009

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

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

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

Скачать исходный проект

Ответы [ 2 ]

0 голосов
/ 18 июня 2009

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

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);
    }
}
0 голосов
/ 17 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...