Сериализация и перезагрузка динамического управления - PullRequest
0 голосов
/ 26 июля 2011

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

Так что мой вопрос прост, и я не могу найти хороший пример работающего кода. Мне нужно добавить некоторые элементы управления на страницу на основе значения раскрывающегося списка. Затем сохраните эти добавленные элементы управления через другие постбэки (сессия в порядке).

Вот фрагмент кода для работы:

    protected void Page_Init(System.Object sender, System.EventArgs e)
    {
        RebuildPlaceholder();
    }

    protected void ddlGroup_Change(System.Object sender, System.EventArgs e)
    {
        ExampleDataContext ctxExample = new ExampleDataContext();
        var aryExample = (from rslt in ctxExample.mvExample
                          where rslt.label.ToLower() == ddlGroup.SelectedValue
                          select rslt);

        foreach (var objExample in aryExample)
        {
            TextBox txtCreated = new TextBox();
            txtCreated.ID = "ddl" + objExample.ID;
            plcExample.Controls.Add(txtCreated);
        }

        StorePlaceholder();
    }

    private void StorePlaceholder()
    {
        //Need code to store all controls in a placeholder.
    }

    private void RebuildPlaceholder()
    {
        //Need code to rebuild all of the controls from Session.
    }

Я нашел эту статью по теме: Динамически добавлять элементы управления , но я борюсь с синтаксисом для сериализации всех элементов управления и т. Д.

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

Подойдет любая версия ASP.NET, если в 4.0 есть что-то, что упростило эту задачу.

Ответы [ 2 ]

0 голосов
/ 26 июля 2011

Я обнаружил, что DropDownList.SelectedValue недоступен во время Page.Init. Но вы все равно можете получить доступ к значению с помощью Request[ddl.UniqueID], а затем создать и добавить все свои динамические элементы управления.

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

0 голосов
/ 26 июля 2011

Вместо этого попробуйте кэшировать выбор выпадающего списка.Затем во время загрузки следующей страницы используйте кеш для установки выбранного значения.Затем загрузите новые элементы управления на основе этого выбора.

Session["CacheKey"] = DropDownList1.SelectedValue;

Затем для доступа к кэшу сеанса:

var value = Session["CacheKey"];

Ознакомьтесь с этой статьей Microsoft о кэшировании ASP.NET

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