質問

概要

こんにちは、
OK、さらに私のアカスタム管理...

ので、ここではそのことを学ぶことができたと私のメインの"授業"のカスタムで制御できます。お気軽に正しい場合は任意のここが違います。

  1. UserControls るから受け継ぐ UserControl やが含まれて以内 ASCX ファイルです。これらは限定されそのために何を為すべきかを、ウェブサイトを取得一部のUIで共通したい単語を入力して下さい:
  2. カスタム複合制御 -これらのコントロールからの継承 WebControl 場所を追加したり、既存の規制の制御に CreateChildControls 方法。これは柔軟性がありながら、デザイナーの支援などを符号といいます。その携帯性の高いものから、きめDLL.
  3. カスタム描画制御 のようにカスタム複合体、これらの追加ウェブ管理図書館"プロジェクト.レンダリングの制御を行うことを目的とするプログラマーによりを上書きする 描画 方法。

私の思い..

OKなのでリスペクトしながら、遊んでカスタム複合材料などの見:

  • されていない/無制御HTML出力では困難な"デバッグ".
  • CreateChildControls (およびその後の方法)での実忙しい 制御できます。Add(myControl) ます。
  • このレンダリングテーブルでレイアウトやコンテンツ)きな課題でした。

の問題(s)..

そこで、認めるように、私は新しいことでとることができると思いますかかかるのではないかとの見方-ベースのポイント上記の..

  • いす使用複合材料?
  • いっきりさらにお得な価格での管理にHTML出力?
  • いうには地獄で"と見ていて気分が良いものをカスタム描画される。

そしてその思いを本当に企業の思いを知る 良い 制御開発でき下げられます。

今回答^_^

役に立ちましたか?

解決

いう、カスタム描画されます。そのほとんどの場合、この複合でき、使用UserControlがいえると思いましてフト制御(pun意図しない)のメリット独自のレンダリング戦略です。

がんを制御する簡単なのに十分なメリットは、複合材料(例えば、テキストボックス組み合わせjavascript/dhtmlベdatepicker"を持つ例は一例なんだかとってもおいしそうに描画されるカスタム管理にかかるものと思われます。

他のヒント

いつものように拡張手法を使っていたカスタムレンダリング:

 public static void WriteControls
        (this HtmlTextWriter o, string format, params object[] args)
 { 
    const string delimiter = "<2E01A260-BD39-47d0-8C5E-0DF814FDF9DC>";
    var controls  = new Dictionary<string,Control>();

    for(int i =0; i < args.Length; ++i)
    { 
       var c = args[i] as Control; 
       if (c==null) continue;
       var guid = Guid.NewGuid().ToString();
       controls[guid] = c;
       args[i] = delimiter+guid+delimiter;
    }

    var _strings = string.Format(format, args)
                         .Split(new string[]{delimiter},
                                StringSplitOptions.None);
    foreach(var s in _strings)
    { 
       if (controls.ContainsKey(s)) 
           controls[s].RenderControl(o);
       else 
           o.Write(s);
    }
}

次に、描画のためのカスタム複合体のRenderContents()メソッドを書いています:

protected override void RenderContents(HtmlTextWriter o)
{ 
    o.WriteControls
         (@"<table>
               <tr>
                    <td>{0}</td>
                    <td>{1}</td>
               </tr>
             </table>"
            ,Text
            ,control1);
 }

Robきます。のアプローチではなく平和的話し合いを行い、種類のハイブリッド.最ascxファイル周辺には各プロジェクトなどの見、デザイナーが感じで快適に編集実際にマークアップのascxついてのお問い合わせデザイナーです。ない場合は計画を実CSS/マークアップ/設計変更の制御自身のその後で体験することもできるカスタム描画されます。しかし、私のアプローチは関連する複雑なシナリオには、これらをあわせる必要がある場合、デザイナー))

私はよく使用複合制御できます。の代わりにオレはRenderContents、割り当て各御CssClass利用スタイルシート.複数で制御できます。追加、延長方法

//Controls.Add(c1, c2, c3)
static void Add(this ControlCollection coll, params Control[] controls)
 { foreach(Control control in controls) coll.Add(control);
 }

素早く汚れたレンダリングに使っているかのようになります:

writer.Render(@"<table>
                   <tr><td>{0}</td></tr>
                   <tr>
                       <td>", Text);
control1.RenderControl(writer);
writer.Render("</td></tr></table>");

のための初期化制御特性に使っている物件初期化子構文:

childControl = new Control {  ID="Foo"
                            , CssClass="class1"
                            , CausesValidation=true;
                           };

使用カスタム複合制御点の状況が大きなウェブアプリケーションのための再利用が大きな塊をもたらしています。しいのみの追加に統のものの開発ではなく繰り返します。大型プロジェクトまた最近では何ができたのかは次の通りです:

  • 毎複合制御。としての使用に包まれたもの。
  • 毎複合制御には、テンプレートを作成します。るascxファイルなし <%制御%>ディレクティブ)のマークアップのためのテンプレートを作成します。
  • のコンテナ(管理自体も)が初期化されたからテンプレートを作成します。
  • コンテナの乾性のための他のすべてのコントロールのテンプレートを作成します。
  • だけます。制御できます。Add([the_container])を複合制御。

実際に必要な基底クラスとの初期化コンテナの指定されたテンプレートも例外をスローがコントロールが出てきませんのテンプレートを作成します。もちろんこれを失わせないアイテムの小さな願います。ない場合は再利用コードとマークアップ及びみたいに簡単な制御だけに基づいており、また以下のユーザーで制御できます。

ることができるかもしれませこの技術をデザインす:

http://aspadvice.com/blogs/ssmith/archive/2007/10/19/Render-User-Control-as-String-Template.aspx

自分の好きな名前を付けてインスタンスのユーザー制御の実行時に使用LoadControl方法、その手でstatebagしながら、その後に添付して、制御ます。なお複合制御が実際に機能のコントローラです。ascxファイルのようなものがあります。

このように保存するトラブルのインスタンスを生成する全体の管理ツリースタイルの管理クライアントまで、フルのC#!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top