简体   繁体   English

ASP.net服务器控件和使用AjaxcontrolToolkit

[英]ASP.net Server Controls and using AjaxcontrolToolkit

I have a question about server controls VS. 我对服务器控件VS有疑问。 user controls (.ascx). 用户控件(.ascx)。 Currently, when I write a user control, I want to be able to take advantage of using the AjaxControlToolKit DLL. 当前,当我编写用户控件时,我希望能够利用AjaxControlToolKit DLL的优势。 In particular, I want my user control to be able to do partial post backs and use the various extenders (modalPopUp for example). 特别是,我希望我的用户控件能够进行部分回发并使用各种扩展程序(例如,modalPopUp)。 My boss, though, prefers us to use server controls so that we can compile them into a DLL and use them in various applications. 不过,我的老板更喜欢我们使用服务器控件,以便我们可以将它们编译为DLL并在各种应用程序中使用它们。 My question is: If I rewrite my user controls to be server controls, will I still be able to use the AjaxControlToolKit and all its features (asyn post backs and extenders)? 我的问题是:如果我将用户控件重写为服务器控件,是否仍然可以使用AjaxControlToolKit及其所有功能(asyn回发和扩展程序)?

FYI: I am using Visual Studio 2010, AjaxControlToolkit 4.1.60919 and .Net 4.0 仅供参考:我正在使用Visual Studio 2010,AjaxControlToolkit 4.1.60919和.Net 4.0

Yes, you'll be able to do this. 是的,您将可以执行此操作。 Just inherit your control from the CompositeControl class interface and add any extender or control from the ACT project to the Controls collection the same way as you should do this with ordinal ASP.NET server controls. 只需从CompositeControl类接口继承控件,然后将ACT项目中的任何扩展程序或控件添加到Controls集合中,就如同使用序数ASP.NET服务器控件一样。 Also you can inherit existing control and implement INamingContainer interface but in this case you must call RenderChildren method manually from control's Render method: 您还可以继承现有控件并实现INamingContainer接口,但是在这种情况下,您必须从控件的Render方法中手动调用RenderChildren方法:

[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);
    }
}

} }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM