ASP Сделать невидимый элемент видимым

На моей веб-странице есть большая таблица и флажок. Изначально таблица не отображается. Когда флажок установлен, javascript вызывает tablename.SetVisible(cb.GetChecked()). Это не удается, потому что невидимая таблица просто отсутствует на странице и не может быть сделана видимой. Отладчик говорит:

Ошибка выполнения Microsoft JScript: «имя таблицы» не определено

Если я устанавливаю таблицу видимой, а затем запускаю веб-страницу, флажок работает хорошо и может снова сделать таблицу невидимой и видимой.

Но таблица действительно большая и, как правило, раздражает, так как же заставить флажок работать с таблицей, изначально невидимой?

На самом деле это с элементами управления DevExpress, но я чувствую, что это не проблема DevExpress.

Источник на стороне сервера просто:

protected void Page_Load(object sender, EventArgs e)
{
    gridResults.DataSource = ds.Tables["Results"];
    gridResults.KeyFieldName = "Sample_Name";
    gridResults.DataBind();
    gridResults.SettingsPager.PageSize = 100;
 }

person Roland    schedule 21.08.2013    source источник
comment
Работаете ли вы с событиями Checkbox? У вашего флажка есть атрибут runat='server'?   -  person Saman Gholami    schedule 21.08.2013
comment
Да, это есть у всех моих элементов. Хорошо это или плохо?   -  person Roland    schedule 21.08.2013
comment
вы используете элементы управления на стороне сервера. Не могли бы вы опубликовать исходный код?   -  person Saman Gholami    schedule 21.08.2013
comment
Вы пометили это как asp-classic, но говорите, что ваши элементы имеют атрибут runat="server"?   -  person Tim B James    schedule 21.08.2013
comment
Пожалуйста, отредактируйте свой вопрос и поместите туда исходный код   -  person Saman Gholami    schedule 21.08.2013
comment
Я добавил серверный код к вопросу выше. runat находится там по умолчанию. Я хочу сказать, что я хотел бы показать/скрыть таблицу с кодом на стороне клиента из события флажка.   -  person Roland    schedule 21.08.2013
comment
Пожалуйста, отправьте код для видимой/невидимой сетки   -  person Saman Gholami    schedule 21.08.2013


Ответы (1)


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

Я бы посоветовал, если вы не хотите отображать таблицу на странице, установите для свойства стиля display значение none;

C#:

gridResults.CssClass = "hidden";

CSS

.hidden{ display: none; }

Затем, когда вы меняете статус флажка, вы просто переключаете класс hidden.

JavaScript

document.getElementById('[gridResults_ID]').className = ""; // show the table

OR

document.getElementById('[gridResults_ID]').className = "hidden"; // hide the table again
person Tim B James    schedule 21.08.2013
comment
Я читал о методе CSS, и вы помогли мне использовать его с методом C# CSS. Однако я получаю сообщение об ошибке времени выполнения, связанное с object is null or undefined, что, вероятно, означает, что имя, которое DevExpress использует для элемента управления, не совпадает с именем, которое видит document.getElementById. Я спрошу дальше на форуме DevExpress об этой детали. - person Roland; 21.08.2013
comment
Да, идентификатор, который генерируется в asp.net WebForms, обычно изменяется во время выполнения, поэтому, если ваш идентификатор элемента управления равен gridResults, он может быть изменен на что-то вроде MyContentPlaceholder_gridResults. - person Tim B James; 21.08.2013
comment
DevExpress упрощает многие вещи, но здесь создается впечатление, что я смешиваю высокоуровневое программирование с машинным кодом. На самом деле строка gridResults искажена во что-то несвязанное, потому что в точке останова исключения, показывающей фактически работающий код, я не смог найти другой экземпляр этой строки. - person Roland; 21.08.2013
comment
@Roland Извините, я не могу помочь вам с причудами DevExpress, никогда им не пользовался. - person Tim B James; 21.08.2013
comment
Спрошу дальше на форуме DevExpress.com. Задавать хороший вопрос важно, и ваша информация очень помогает. - person Roland; 21.08.2013