0

我正在构建一个复合控件,它根据指定的状态在页面上呈现 HTML。

如果我设置控件,并将其添加到ControlCollection组合中,并在设置过程中设置控件的可见性,false它似乎工作正常,则面板会隐藏,直到页面上的回发导致面板显示。

但是,当我在方法中包装一个RenderBeginTag(writer)and时,它似乎在初始化期间忽略了“”语句?RenderEndTag(writer)Rendervisible = 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);

这基本上仍然显示面板,不管初始化期间的可见性检查。我已经测试了各种不同的场景,出于某种原因,这个只是忽略了状态。有任何想法吗?

谢谢,

埃里克

4

1 回答 1

2

Visible 标志确定控件是否在服务器上呈现。因此,当您在 CreateChildControls 期间添加控件时,ASP 将检查 Visible 标志并在 Render() 期间跳过该控件。但是,当您调用 RenderBeginTag 时,您实际上忽略了 Visible 标志。

如果您想将控件 HTML 呈现给客户端,但将 div 隐藏,那么您应该将 display CSS 属性设置为 none。

例如

this._contentPanel.ID = "ContentPanel";
this._contentPanel.Visible = false;
this._contentPanel.Style["display"] = "none";
于 2011-11-03T04:35:42.253 回答