更新面板内的单击事件上的按钮,通过不触发的自定义服务器控件呈现

时间:2013-03-06 06:02:14

标签: c# custom-controls asp.net-customcontrol

我正在开发一个自定义控件,用于呈现(a)textbox(es),在textchange event我希望异步地将值发送到控件,在那里它将搜索并使数据可用于稍后在page load上提取的公开属性。但我的问题是,如何异步地调用我控制中的方法来执行搜索功能。目前,textbox textchangebuttons click events未触发,按钮单击加载页面,在文本框中写入不执行任何操作。这是代码。

    public int Count { get; set; }
    public List<object> Selection { get; set; }
    public object SelectedObject { get; set; }
    public Label label;
    public TextBox textBox;
    protected override void RenderContents(HtmlTextWriter output)
    {
        textBox = new TextBox();
        textBox.TextChanged += new EventHandler(Method);
        UpdatePanel up = new UpdatePanel();
        up.ID = "UpdatePanel1";
        up.ChildrenAsTriggers = true;
        up.UpdateMode = UpdatePanelUpdateMode.Conditional;
        up.ContentTemplateContainer.Controls.Add(a);
        this.label = new Label();
        this.label.Text = "Initialized Text.";
        up.ContentTemplateContainer.Controls.Add(this.label);
        Button button = new Button();
        button.Text = "Say Hello";
        button.Click += new EventHandler(HandleButtonClick);
        up.ContentTemplateContainer.Controls.Add(button);
        this.Controls.Add(up);
        foreach (Control c in this.Controls)
        {
            c.RenderControl(output);
        }
    }


    private List<object> Get(string searchValue)
    {
        throw new NotImplementedException();
    }
    public void Method(object sender, EventArgs e) {
        (sender as TextBox).Text += " ";
        //Selection = Get((sender as TextBox).Text);
    }
    private void HandleButtonClick(object sender, EventArgs e)
    {
        this.label.Text = "Hello " + this.textBox.Text;
        //Selection = Get(this.textBox.Text);
    }

1 个答案:

答案 0 :(得分:0)

发现你必须从IPostBackDataHandler继承你的控件,同样,异步问题就在那里。我已经使用了一个解决方法,我已将控件放在updatepanel中(将updatepanel放在aspx上),通过控制onclick注册一个按钮绑定,在jquery / javascript上我触发按钮的click事件以异步发送调用。事情工作正常,但在触发事件javascript代码再次运行后,尝试通过再次注册客户端脚本调用该函数,没有工作。