用户控件(ascx)中的LinkBut​​ton.Command不会调用指定的方法

时间:2009-07-08 00:37:08

标签: asp.net asp.net-ajax

我有以下代码:

   public partial class queryTerm : System.Web.UI.UserControl
    {
        private static readonly List<string> BooleanOperators = new List<string> { ".", "AND", "AND NOT", "OR", "OR NOT" };

        protected void BuildBoolPanel()
        {
            var parensOpen = _labelBoolean.Text;
            foreach (var @operator in BooleanOperators)
            {
                if (parensOpen == @operator)
                {
                    continue;
                }

                var linkButton = new LinkButton();
                linkButton.Text = @operator;
                linkButton.CommandArgument = @operator;
                linkButton.CommandName = "parensOpen";
                linkButton.Command += new CommandEventHandler(linkButton_Command);
                _popupMenuParensOpen.Controls.Add(linkButton);
                var literalLineBreak = new Literal();
                literalLineBreak.Text = "<BR/>";
                _popupMenuParensOpen.Controls.Add(literalLineBreak);
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
                BuildBoolPanel();
        }

        void linkButton_Command(object sender, CommandEventArgs e)
        {
            _labelBoolean.Text = (string)e.CommandArgument;
            BuildBoolPanel();
        }
    }

我有一个面板(它是_popupMenuParensOpen),只要光标在我的用户控件中的特定标签上找到它就会与hoverextender一起显示。

此面板包含所有布尔运算符和'。'意思是没有设定。 我以编程方式在我的面板中添加布尔运算符作为标签,我只添加那些与当前设置不匹配的运算符。例如,如果我的标签设置为'AND',当我将鼠标悬停在它上面时,我会显示除'AND'之外的所有内容。


问题是,即使我指示他们,也从不调用linkBut​​ton_Command。 更奇怪的是,如果我在页面加载中删除'if(!this.IsPostBack),它会调用它。

我的控件位于updatePanel内。

1 个答案:

答案 0 :(得分:0)

问题是您在Page_Load事件期间动态添加控件。当发生回发时,这些控件将不会存在,并且每次都需要创建。这就是为什么当您删除 if(!Page.IsPostBack)并重建控件时,它会起作用。

由于您将其构建为用户控件,因此您可能希望重新调整CreateChildControls方法。