ASP.net раскрывается с динамическим стилем, а затем запоминает стили при прерванной отправке.

StackOverflow https://stackoverflow.com/questions/492177

Вопрос

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

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

CheckBizRules();

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

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

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

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

Это было полезно?

Решение

Я не уверен, что полностью понимаю, какой стиль вы применяете к раскрывающимся элементам, но кажется, что этот стиль элемент управления не сохраняет при обратной передаче.Обычно такого рода информацию необходимо сохранять в 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, а не из БД.

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top