2011-06-27 17 views
0

指定された状態に基づいてページ上にHTMLをレンダリングするコンポジットコントロールを構築しています。コンポジットコントロール内のパネルは可視性を無視します

コントロールを設定してコンポジットの場合はControlCollectionに追加し、設定中にコントロールの表示をfalseに設定すると、正常に動作しているように見えますが、ページのポストバックが原因でパネルが非表示になる表示されるパネル。

しかし、私はRender方法でRenderBeginTag(writer)RenderEndTag(writer)を包むとき、それは初期化時に「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); 

これは基本的に、初期化中の視認性チェックに関係なくパネルを表示します。私はさまざまなシナリオをテストしましたが、何らかの理由でこれは単に状態を無視します。何か案は?

おかげで、

エリック

答えて

2

可視フラグは、制御は、サーバ上でレンダリングされたか否かを判定する。したがって、CreateChildControlsの間にコントロールを追加すると、ASPはVisibleフラグをチェックし、Render()中にコントロールをスキップします。しかし、RenderBeginTagを呼び出すと、Visibleフラグは実質的に無視されます。

コントロールHTMLをクライアントにレンダリングするが、divを非表示にしたい場合は、表示CSS属性をnoneに設定する必要があります。

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