2

我对服务器控件 VS 有疑问。用户控件 (.ascx)。目前,当我编写用户控件时,我希望能够利用 AjaxControlToolKit DLL。特别是,我希望我的用户控件能够进行部分回发并使用各种扩展程序(例如modalPopUp)。不过,我的老板更喜欢我们使用服务器控件,以便我们可以将它们编译成 DLL 并在各种应用程序中使用它们。我的问题是:如果我将用户控件重写为服务器控件,我还能使用 AjaxControlToolKit 及其所有功能(异步回发和扩展程序)吗?

仅供参考:我正在使用 Visual Studio 2010、AjaxControlToolkit 4.1.60919 和 .Net 4.0

4

1 回答 1

1

是的,您将能够做到这一点。只需从类接口继承您的控件CompositeControl,并将任何扩展程序或控件从 ACT 项目添加到 Controls 集合,就像您应该使用序号 ASP.NET 服务器控件执行此操作一样。您也可以继承现有的控件并实现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 回答