ASP.net раскрывается с динамическим стилем, а затем запоминает стили при прерванной отправке.
-
20-08-2019 - |
Вопрос
Итак, у меня есть раскрывающийся список 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, а не из БД.
Другие советы
Ну, я не мог придумать ничего, кроме как обратиться к базе данных, чтобы повторно получить данные моего списка, когда Страница была нет допустимо, и измените стиль элемента управления.