首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoPostBack不适用于自定义控件

AutoPostBack不适用于自定义控件
EN

Stack Overflow用户
提问于 2011-01-12 05:39:39
回答 1查看 2.2K关注 0票数 0

我在ASP.net中创建了一个自定义控件,其中包括一个AutoPostBack设置为true的DropDownList。我还为control.But附加了一个事件control.But,我发现事件没有被触发。正常情况下,设置为true的asp.net DropDownList将触发事件。我正在使用.net 3.5版本的VS2010。

这是我的代码:ServerControl1.cs

代码语言:javascript
复制
[ToolboxData("<{0}:ServerControl2 runat=server></{0}:ServerControl2>")]
public class ServerControl1 : WebControl
{
    protected DropDownList drplist;
    protected TextBox tb;

    protected override void RenderContents(HtmlTextWriter output)
    {
        drplist.RenderControl(output);
        tb.RenderControl(output);

    }

    protected override void CreateChildControls()
    {
        base.CreateChildControls();
        drplist = new DropDownList() { AutoPostBack = true };
        drplist.Items.Add("a");
        drplist.Items.Add("b");
        drplist.Items.Add("c");
        drplist.Items.Add("d");
        drplist.SelectedIndexChanged += new EventHandler(drplist_SelectedIndexChanged);
        tb = new TextBox();
    }

    void drplist_SelectedIndexChanged(object sender, EventArgs e)
    {
      tb.Text = "even fired";          
    }
}

ServerControl1Test:

代码语言:javascript
复制
 protected void Page_Load(object sender, EventArgs e)
    {
        ServerControl1 ServerControl1 = new ServerControl1();
        this.Controls.Add(ServerControl1);
    }

有人能告诉我我在这里错过了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2011-01-12 07:09:26

首先,您需要您的自定义控件成为页面树的一部分。在这种情况下,ASP.NET将能够找到它们并包含所有必需的脚本(如果有的话)。您不需要覆盖RenderContents。只需将下拉列表和文本框添加到Controls集合中即可。

第二,请阅读API参考CreateChildControls。页面底部有评论,内容如下:

不要覆盖CreateChildControls! 您将遇到一个充满伤害的世界,尤其是在订阅子控件事件时!相反,创建一个名为CreateCustomChildControls的私有方法。在那里建立你的控制树。只需重写OnInit并从那里调用CreateCustomChildControls

因此,在您的示例中,代码将如下所示:

代码语言:javascript
复制
[ToolboxData("<{0}:ServerControl2 runat=server></{0}:ServerControl2>")]
public class ServerControl1 : WebControl
{
    protected DropDownList drplist;
    protected TextBox tb;

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        CreateCustomChildControls();
    }

    private void CreateCustomChildControls()
    {
            drplist = new DropDownList() { AutoPostBack = true };

            drplist.Items.Add("a");
            drplist.Items.Add("b");
            drplist.Items.Add("c");
            drplist.Items.Add("d");

            drplist.SelectedIndexChanged += new EventHandler(drplist_SelectedIndexChanged);

            tb = new TextBox();

            base.Controls.Add(drplist);
            base.Controls.Add(tb);
    }

    void drplist_SelectedIndexChanged(object sender, EventArgs e)
    {
        tb.Text = "even fired";
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4665673

复制
相关文章

相似问题

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