ASP.net раскрывает динамически стилизацию и затем запоминает стили при прерванной отправке - PullRequest
0 голосов
/ 29 января 2009

Итак, у меня есть выпадающий список ASP (это .net 2.0). Я связываю это с данными. По сути, когда страница загружается, а это не запись назад, мы извлекаем данные записей, связываем все выпадающие списки и устанавливаем для них соответствующие значения (строго говоря, мы: инициализируем страницу базовым набором данных из БД, связываем выпадающие списки. из БД, получить фактические данные записи из БД, установить утопления в соответствующие настройки в это время). То, что я хочу сделать, это выборочно стилизовать параметры списка. Таким образом, база данных возвращает 3 элемента: ID, текст и флаг, указывающий, является ли запись «активной» (и я буду соответствующим образом стилизовать). Это достаточно легко сделать, и я сделал это.

Моя проблема в том, что происходит, когда отправка формы прекращается. Мы немного расширили класс Page и создали метод AddError (), который создаст список ошибок из неудачных проверок бизнес-правил и затем отобразит их в ValidationSummary. Это работает примерно так, в событии нажатия кнопки отправки:

CheckBizRules();

if(Page.IsValid)
{
    SaveData();
}

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

Я надеялся избежать здесь еще одного вызова БД (например, снова получить данные списка из БД, если страница недействительна, просто для того, чтобы переопределить список). Но это не конец света, если это мой курс действий. Я надеялся, что у кого-то может быть альтернативное предложение.

Я не мог придумать, как лучше сформулировать этот вопрос, если у кого-то есть какие-либо предложения или требуется разъяснение, не стесняйтесь его получить, силой, если потребуется. ;)

Ответы [ 2 ]

0 голосов
/ 20 февраля 2009

Я не уверен, что полностью понимаю, какой стиль вы применяете к своим выпадающим элементам, но кажется, что этот стиль - то, что элемент управления не сохраняет в постбэках. Обычно такого рода информацию необходимо сохранять в ViewState. Я вижу два варианта (кроме перезагрузки из БД):

Первый метод: создайте собственный выпадающий элемент управления, который наследуется от DropDownList. Затем сохраните данные стиля в сумке ViewState элемента управления при стилизации элементов:

public void SetItemActive(ListItem item)
       {
         ViewState[item.Value] = "active";           
        }

затем переопределить OnRender

protected override void Render(HtmlTextWriter writer)
{

   ....

   foreach(ListItem item in Items)
   {
    if ( ViewState[item.Value] == "active")
    { 
            ** RenderActiveItem **
    }
    else 
    {
            ** RenderNormalItem **

    }

}

Второй метод: сохранить активные идентификаторы в ViewState страницы, а затем заново оформить выпадающий список для каждой обратной передачи, используя данные из ViewState, а не из DB

0 голосов
/ 30 января 2009

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

...