【问题标题】:button action not firing按钮动作未触发
【发布时间】:2012-12-24 07:32:00
【问题描述】:

我有一个 web 表单,它在组合框(devexpress)中选择时动态加载控件。我在主窗体上有以下代码

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {

        }
        if (Session["_active_control"] != null)//persist control on postbacks
        {
            Control cntrl = Session["_active_control"] as Control;
            pnl_main.Controls.Clear();
            pnl_main.Controls.Add(cntrl);
        }
    }

    protected void cmb_control_SelectedIndexChanged(object sender, EventArgs e)
    {
        Control cntrl= Page.LoadControl("~/" + cmb_control.SelectedItem.Value);
        pnl_main.Controls.Clear();
        pnl_main.Controls.Add(cntrl);
       Session["_active_control"] = cntrl;
    }

我还有一个包含三个文本框的用户控件和一个包含代码的按钮

  protected void btn_save_Click(object sender, EventArgs e)
    {
        lbl.Text = ASPxTextBox1.Text + "<br>" + ASPxTextBox2.Text + "<br>" + ASPxTextBox3.Text;
    }

我的问题是,如果我动态加载用户控件的保存按钮,它不会触发(我已经使用断点和上面显示的代码进行了检查。但是,如果我静态使用它,它运行顺利。(即通过拖动设计模式)

【问题讨论】:

  • 你能给我们看看Button Source Code..??
  • lbl.Text = ASPxTextBox1.Text + "
    " + ASPxTextBox2.Text + "
    " + ASPxTextBox3.Text;
  • 这是一个Server-Side 代码..我要求这样的 HTML 按钮代码:&lt;asp:Button ID="btnSave" runat="server" OnClick="btnSave_Click" Text="Save" /&gt;
  • 它是第三方控件吗..??因为前缀是dx

标签: c# asp.net devexpress


【解决方案1】:

你是对的,你必须在回发中保持控制。

但是页面加载事件为时已晚,无法重新添加控件。在页面的 Init 事件上执行此操作,您应该会很好。要接收回发事件,当调用 ProcessPostData(在 PreLoad 之前调用)时,控件应该存在。

对于文本框,您也希望接收用户输入的值。 ProcessPostData 也会出现这种情况,如果在此之后添加控件,您将不会收到用户输入的值。

参考:ASP.NET Page Life Cycle

【讨论】:

  • 感谢您的帖子,我已将动态控制代码放在“OnPreInit”上,但我仍然无法接收用户控件上的事件。
  • 你在上面的 cmets 中提到的 dx 看起来像是一个 devExpress 自定义控件。如果该控件是在稍后的事件中在内部创建的,您将无法像这样动态地创建它。大多数控制提供者都有关于如何做到这一点的教程(要求相当普遍)。您应该询问 devExpress 支持。我会将问题标记为 devexpress,这可能会从了解它的开发人员那里得到一些帮助。
  • 向控件添加静态 ID。 cntrl.ID = "myLoadedControl"。以防万一动态 id 导致问题。
  • 我做到了。还是一样的问题
【解决方案2】:

嘿,我找到了解决方案

而不是在combobox_selectedindexchanged 中创建控件,我将控件创建代码放在基于combobox.selectedindex 的Pageload 上,即

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

        if (cmb_control.SelectedItem != null)
        {
            Control cntrl = Page.LoadControl("~/" + cmb_control.SelectedItem.Value);
            cntrl.ID = "_new_ctrl" + cmb_control.SelectedItem.Value;

            pnl_main.Controls.Clear();
            pnl_main.Controls.Add(cntrl);
        }

    }

Button click event not firing within use control in ASP .Net

【讨论】:

    猜你喜欢
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多