首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何:在ASP.NET自定义服务器控件中使用AJAX

如何:在ASP.NET自定义服务器控件中使用AJAX
EN

Stack Overflow用户
提问于 2009-02-26 21:51:52
回答 3查看 6.3K关注 0票数 4

有没有人知道一个很好的教程,演示了在自定义ASP.NET服务器控件中使用现有的AJAX控件扩展器?

我不想建立一个“自定义AJAX服务器控件”。我想构建一个自定义服务器控件,它使用现有的AJAX控件扩展器。

我想将asp:TextBox、asp:ImageButton、asp:CustomValidator (带有来自嵌入式资源的客户端javascript )和ajax:CalendarExtender组合到一个自定义服务器控件中。或者这已经被创建了?

任何帮助都将不胜感激。谢谢。

更新:基本上,我想创建一个CompositeControl,它有一个ajax:CalendarExtender作为子控件。

EN

回答 3

Stack Overflow用户

发布于 2009-03-08 15:31:19

听起来你想要的是一个复合控件。它们非常类似于用户控件,而不是使用ascx文件来创建控件,而是通过编程方式创建所有控件。与使用用户控件相比,这样做的最大优点是您最终得到了可以放在程序集中并在不同项目中使用的东西。

复合控件可以从control或WebControl继承。我个人通常发现继承控件更有用,因为我通常不需要从WebControl获得很多额外的东西,比如样式属性,因为我通常只通过一个CssClass属性设置样式。

您还需要确保您的类实现INamingContainer接口。这将确保如果控件在同一父容器中多次使用,则每个子控件将自动获得唯一的名称。

创建复合控件时要做的最重要的事情是覆盖控件的CreateChildControls方法。所有用于实际创建控件的逻辑都应该放在这里。该框架将自动确保在页面生命周期中的正确时间调用此函数。

下面是一个小示例:

代码语言:javascript
运行
复制
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";
        }
    }
}

我不认为ASP.NET AJAX应该让事情变得如此复杂。我能想到的唯一一件事就是,您需要确保在要添加复合控件的任何页面上创建一个ScriptManager。

在MSDN网站上有一个这样的full example。在this blog上还有另一个很好的例子。

票数 3
EN

Stack Overflow用户

发布于 2009-02-26 22:16:04

你想要的是构建一个用户控件,而不是一个自定义控件。用户控件是复合控件,而自定义控件是从头开始生成的控件,或者是从基本控件派生的控件。

票数 0
EN

Stack Overflow用户

发布于 2009-03-06 00:21:12

我建议你在MSDN上搜索一下。在过去的一两年里,我在他们的杂志上看到了几篇关于这个主题的很好的文章,非常透彻。但是我没有他们的链接,而且我太懒了,不愿意为你搜索。:\

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/592614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档