Атрибуты ListItems в DropDownList потеряны на обратной передаче?

Как насчет чего-то вроде этого: Случайный Генератор Файла 1.1

Или генератор Файла

69
задан David Hodgson 21 August 2009 в 18:08
поделиться

2 ответа

У меня была та же проблема, и я хотел внести этот ресурс, где автор создал унаследованного потребителя ListItem для сохранения атрибутов в ViewState. Надеюсь, это сэкономит время, которое я потратил, пока не наткнулся на него.

protected override object SaveViewState()
{
    // create object array for Item count + 1
    object[] allStates = new object[this.Items.Count + 1];

    // the +1 is to hold the base info
    object baseState = base.SaveViewState();
    allStates[0] = baseState;

    Int32 i = 1;
    // now loop through and save each Style attribute for the List
    foreach (ListItem li in this.Items)
    {
        Int32 j = 0;
        string[][] attributes = new string[li.Attributes.Count][];
        foreach (string attribute in li.Attributes.Keys)
        {
            attributes[j++] = new string[] {attribute, li.Attributes[attribute]};
        }
        allStates[i++] = attributes;
    }
    return allStates;
}

protected override void LoadViewState(object savedState)
{
    if (savedState != null)
    {
        object[] myState = (object[])savedState;

        // restore base first
        if (myState[0] != null)
            base.LoadViewState(myState[0]);

        Int32 i = 1;
        foreach (ListItem li in this.Items)
        {
            // loop through and restore each style attribute
            foreach (string[] attribute in (string[][])myState[i++])
            {
                li.Attributes[attribute[0]] = attribute[1];
            }
        }
    }
}
70
ответ дан 24 November 2019 в 13:47
поделиться

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

Есть несколько мест, где можно включить ViewState - проверьте узел в web.config, а также в директиве <% @ page%> в вверху самого файла aspx для свойства EnableViewState . Этот параметр должен быть true для работы ViewState.

Если вы не хотите использовать ViewState, просто удалите if (! IsPostBack) {...} из кода, который добавляет ListItems , и элементы будут воссоздаваться при каждой обратной передаче.

Изменить: Прошу прощения - я неправильно прочитал ваш вопрос. Вы правы, что атрибуты не выдерживают обратной передачи, поскольку они не сериализованы в ViewState. Вы должны повторно добавлять эти атрибуты при каждой обратной передаче.

8
ответ дан 24 November 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: