Панель в композитном элементе управления игнорирует видимость - PullRequest
0 голосов
/ 27 июня 2011

Я создаю составной элемент управления, который отображает HTML на странице на основе указанного состояния.

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

Но, когда я обертываю RenderBeginTag(writer) иRenderEndTag(writer) в методе Render кажется, что он игнорирует оператор "visible = false" во время инициализации?

// initialization
this._contentPanel = new Panel();
this._contentPanel.ID = "ContentPanel";
this._contentPanel.Visible = false;
this.Controls.Add(this._contentPanel);

// CreateChildControls
this.InitContentPanel(); // adds the content panel to control collection

// render
this._contentPanel.RenderBeginTag(writer);
writer.WriteLine("<div>Some copy here</div>");
this._contentPanel.RenderEndTag(writer);

Это в основном все еще отображает панель, независимо от проверки видимости во время инициализации.Я тестировал различные сценарии, и по какой-то причине этот сценарий просто игнорирует состояние.Есть идеи?

Спасибо,

Эрик

1 Ответ

2 голосов
/ 03 ноября 2011

Флаг Visible определяет, будет ли отображаться элемент управления на сервере. Поэтому при добавлении элемента управления во время CreateChildControls ASP проверит флаг Visible и пропустит элемент управления во время Render (). Однако когда вы вызываете RenderBeginTag, вы фактически игнорируете флаг Visible.

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

, например

this._contentPanel.ID = "ContentPanel";
this._contentPanel.Visible = false;
this._contentPanel.Style["display"] = "none";
...