2009-02-26 7 views
4

カスタムASP.NETサーバーコントロールで既存のAJAXコントロールエクステンダーを使用することを示す良いチュートリアルを知っている人はいますか?方法:ASP.NETカスタムサーバーコントロールでAJAXを使用する

「カスタムAJAXサーバーコントロール」を構築したくありません。既存のAJAXコントロールエクステンダを使用するカスタムサーバーコントロールを構築したい。

asp:TextBox、asp:ImageButton、asp:CustomValidator(組み込みリソースからのクライアント側のJavaScript)、ajax:CalendarExtenderを1つのカスタムサーバーコントロールに結合したいと考えています。またはこれはすでに作成されていますか?

ご協力いただければ幸いです。ありがとう。

UPDATE:基本的には、ajax:CalendarExtenderを子コントロールとして持つCompositeControlを作成したいと考えています。

+1

これは私をもう少し近づけましたが、カスタムJavaScriptですが、既存のAJAXコントロールではありません:http://msdn.microsoft.com/en-us/library/bb386450.aspx –

答えて

0

あなたが望むのは、おそらくカスタムコントロールではなくカスタムコントロールを構築することです。ユーザーコントロールはコンポジットコントロールですが、カスタムコントロールは基本コントロールから派生したものから構築されたコントロールです。

+0

実際には、私はすでにこれをユーザーコントロールが、簡単です(クイックフィックスを探している場合はこれを実行してください)。しかし、私はこのようなコントロールを再利用したいと思います。個々のコントロール全体をコピーする必要はありません。 –

-1

MSDNで検索することをお勧めします。ここ1年か2年の雑誌で、そのトピックに関するいくつかの良い記事がかなり徹底的に見られました。しかし、私はそれらにリンクしていないと私はあなたのためにGoogleにあまりにも怠惰だ。 :\

+1

私はこれについて多くの検索を行い、何も役に立たないことを発見しました。だからここに質問を投稿した。時間を見つけたら、リンクを投稿してください。ありがとうございました。 –

3

あなたの後ろのようなサウンドは、コンポジットコントロールです。それらは、プログラムですべてを作成するコントロールを作成するためにascxファイルを使用するのではなく、ユーザーコントロールだけに似ています。ユーザーコントロールを使用してこれを行う大きな利点は、アセンブリに入れてさまざまなプロジェクトで使用できるもので終わることです。

複合コントロールは、コントロールまたはWebControlから継承できます。私は個人的には通常Controlを継承するほうが有益です。なぜなら、通常は単一のCssClassプロパティを使ってスタイルを作成するだけなので、WebControlから得られる余分なものはほとんど必要ないからです。

また、クラスがINamingContainerインターフェイスを実装していることを確認する必要があります。これは、コントロールが同じ親コンテナで複数回使用されている場合、各子コントロールが自動的に一意の名前を取得するようにします。

コンポジットコントロールを作成するときに最も重要なことは、コントロールのCreateChildControlsメソッドをオーバーライドすることです。実際にコントロールを作成するためのすべてのロジックがここに入ります。フレームワークは、ページライフサイクルの適切なタイミングで自動的に呼び出されることを自動的に確認します。私は、ASP.NET AJAXはこのくらい複雑にすべきとは思わない

public class MyCompositeControl : Control, INamingContainer 
{ 
    protected override void CreateChildControls() 
    { 
     Controls.Clear(); 

     var textbox = new TextBox(); 
     textbox.ID = "TextBox1"; 
     Controls.Add(textbox); 
     if (!Page.IsPostBack || !IsTrackingViewState) 
     { 
      // make sure you set the properties after 
      // you add it to the parent or the viewstate 
      // won't save properly 
      textbox.MaxLength = 30; 
     } 

     var button = new Button(); 
     button.ID = "Button1"; 
     Controls.Add(button); 
     if (!Page.IsPostBack || !IsTrackingViewState) 
     { 
      button.Text = "Save"; 
     } 
    } 
} 

はここで少し例です。私が考えることができるのは、コンポジットコントロールが追加されるページにScriptManagerを作成する必要があることだけです。

MSDNサイトにfull exampleがあります。 this blogにもう1つ良い例があります。

+0

サーバーコントロールを作成するときに、複合コントロールメソッドを使用したいと思います。しかし、ちょうどfyi、ASP 2.0以上には、これらのhttp://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.compositecontrol.aspxを作成するための新しい方法があります。いずれにしても、AJAX ControlExtendersはうまく動作しません。 –

+0

基本的には、CompositeControlの子コントロールとしてAJAX Control Extenderを持つチュートリアルを探しています。 –

+0

Nifty!私はコンポジットコントロールクラスについて知らなかった。私は特にControlExtendersについての良いチュートリアルは知らない。あなたが答えを見つけることを願っています。 – Helephant

関連する問題