2009-10-31 12 views
16

私は最近自分自身のWebControlを書くことを学んだことがありますが、RenderとRenderControlの違いはまだわかりません。私はRenderを使い始めましたが、ある時点でRenderControlを使い始めました。私はRenderControlを使いました。私が悪い習慣を築いているなら、私は自分のやり方に入る前に芽の中に入れたいと思う。WebControlの作成でRenderControlとRenderControlの違いは何ですか?

答えて

5

RenderControlは、レンダリング方法を利用できるように、必要なものを提供する既存のコントロールがある場合に使用されます。

htmlの表示方法を完全に制御する必要がある場合は、レンダリングが使用されます。

あなたはもちろん、あなたのプログラミング時間の最適な使用のための2つを組み合わせることができます...

2

RenderControlは、子コントロールをレンダリングするページに使用されます。レンダリングでは、個々のコントロールをレンダリングすることができます。ここで

17

が良いの読み取りです:リンクから Render vs RenderControl

抜粋:

Render方法は、応答ストリームに HTML出力を書き込むことによって、自分自身をレンダリングする コントローラを可能にします。 これは、 HTMLTextWriterオブジェクトへの参照を渡します。 を直接応答ストリームに書き込むことができます。この メソッドは、コントロールから直接 を派生させるときに使用する必要があります。

RenderControl方法は、個々の コントロールをレンダリングするためにページによって 使用されます。それはあなたのクラスを あなたのクラスの消費者がそれをレンダリングすることができますし、 あなたが複合コントロールを使用している場合は、 それを使用して子コントロールをレンダリングすることができます。 また、コントロールのvisibility プロパティが falseに設定されている場合、この は呼び出されません。

6

レンダリングは派生クラスがアクセスできることを意味し、保護された方法です。イベントライフサイクル内で呼び出され、コード内で明示的に呼び出されるべきではありません。

RenderControlは、必要に応じてRenderメソッドを呼び出すことができるパブリックメソッドです。たとえば、ControlsCollectionにコントロールを格納するが、テーブル内の独自のセルにレンダリングするカスタムコントロールで使用します。例えば:、申し訳ありません私の答えはちょうどあるhttp://forums.asp.net/t/909220.aspx/1から(

(私はすでに述べたように)それはイベントのライフサイクルに呼ばれているよう

 
    writer.Write(""): 
    foreach(Control ctl in Controls) 
    { 
     writer.Write("") 
     ctl.RenderControl(writer); 
     writer.Write(""); 
    } 
    writer.Write(""); 

あなたはいつも、RenderControlレンダリングオーバーライドし、そしてべきではありませんこのようなクリスタルで明確な説明を書き直すことはあまり見当たりませんでした)

MSが単純にRender()をパブリックメソッドにしていない理由はまだ分かりません。別のRenderControl()が必要なのはなぜですか?これまでのすべての答えから、その理由が分かりません。それを説明することができる最初の人は、光沢のあるupvoteを取得します。

+0

+1システムの混乱している部分の詳細については、私のために完全な絵を描くのを助けました。 –

関連する問題