2

サーバーコントロール VS について質問があります。ユーザー コントロール (.ascx)。現在、ユーザー コントロールを作成するときに、AjaxControlToolKit DLL を利用できるようにしたいと考えています。特に、ユーザー コントロールで部分的なポストバックを実行し、さまざまなエクステンダー (modalPopUp など) を使用できるようにしたいと考えています。しかし、私の上司は、サーバー コントロールを使用して DLL にコンパイルし、さまざまなアプリケーションで使用できるようにすることを好みます。私の質問は、ユーザー コントロールをサーバー コントロールに書き直しても、AjaxControlToolKit とそのすべての機能 (非同期ポスト バックとエクステンダー) を引き続き使用できるかどうかです。

参考: Visual Studio 2010、AjaxControlToolkit 4.1.60919、.Net 4.0 を使用しています。

4

1 に答える 1

1

はい、これを行うことができます。クラス インターフェイスからコントロールを継承CompositeControlし、通常の ASP.NET サーバー コントロールでこれを行うのと同じ方法で、ACT プロジェクトから任意のエクステンダまたはコントロールを Controls コレクションに追加するだけです。また、既存のコントロールを継承してINamingContainerインターフェイスを実装することもできますが、この場合、コントロールのメソッドRenderChildrenからメソッドを手動で呼び出す必要があります。Render

[DefaultProperty("Text")]
[ToolboxData("<{0}:WatermarkedTextBox runat=server></{0}:WatermarkedTextBox>")]
public class WatermarkedTextBox : TextBox, INamingContainer
{
    private AjaxControlToolkit.TextBoxWatermarkExtender _watermarkExtender;

    public string WatermarkText
    {
        get
        {
            return ViewState["WatermarkText"] as string;
        }
        set
        {
            ViewState["WatermarkText"] = value;
        }
    }

    protected override void CreateChildControls()
    {
        Controls.Clear();

        this._watermarkExtender = new AjaxControlToolkit.TextBoxWatermarkExtender
        {
            ID = "wte",
            TargetControlID = this.ID,
            WatermarkText = this.WatermarkText
        };
        this.Controls.Add(_watermarkExtender);
    }

    protected override void Render(HtmlTextWriter writer)
    {
        base.Render(writer);
        RenderChildren(writer);
    }
}

}

于 2013-02-04T17:02:15.837 に答える