0

指定された状態に基づいてページに HTML をレンダリングする複合コントロールを構築しています。

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

しかし、メソッドで and をラップする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);

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

ありがとう、

エリック

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 に答える