19

最近、独自の WebControls を作成する方法を学びましたが、Render と RenderControl の違いについてはまだよくわかりません。私は Render を使い始めましたが、ある時点で RenderControl を使い始めました。現在は RenderControl のみを使用しています。悪い癖がついている場合は、自分のやり方に固執する前に、今すぐ芽を摘みたいと思います。

4

4 に答える 4

17

これは良い読み物です: Render vs RenderControl

リンクからの抜粋:

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

RenderControlメソッドは、個々のコントロールをレンダリングするためにページで使用されます。クラスのコンシューマーがそれをレンダリングできるようにし、複合コントロールを使用している場合は、それを使用して子コントロールをレンダリングできます。また、コントロールの可視性プロパティが false に設定されている場合、これは呼び出されないことに注意してください。

于 2009-10-31T01:26:41.667 に答える
8

Render は保護されたメソッドです。つまり、派生クラスのみがアクセスできます。これはイベント ライフサイクル内で呼び出されるため、コードで明示的に呼び出すべきではありません。

RenderControl は、必要なときに Render メソッドを呼び出すことができるパブリック メソッドです。たとえば、ControlsCollection にコントロールを格納するが、テーブル内の独自のセルにそれらをレンダリングしたいカスタム コントロールで使用します。例えば:

   writer.Write(""):
   foreach (コントロールのコントロール ctl)
   {
      ライター.書き込み("")
      ctl.RenderControl(ライター);
      writer.Write("");
   }
   writer.Write("");

イベント ライフサイクルで呼び出されるため、RenderControl ではなく、常に Render をオーバーライドする必要があります (既に述べたように)。

http://forums.asp.net/t/909220.aspx/1から、申し訳ありませんが、私の答えはそれからのコピーアンドペーストですが、そのような非常に明確な説明を書き直すことにはあまり意味がありませんでした)

MS が単純に Render() を public メソッドにしなかった理由はまだわかりません。別の RenderControl() が必要なのはなぜですか? その理由は、これまでに与えられたすべての回答から欠落しています。それを説明できる最初の人は、ピカピカの賛成票を獲得します。

于 2012-02-05T14:47:52.217 に答える
6

RenderControl is used if there is an existing control that provides what you want so you can take advantage of how that is rendered.

Render is used if you need to take full control over how the html is rendered.

You can of course combine the two for the most optimal use of your programming time...

EDIT
For a better explanation on this, and excellent point to what to use when, see the answer from mhenry1384.

于 2010-04-30T11:09:10.700 に答える
2

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

于 2009-10-31T01:15:05.703 に答える