代码之家  ›  专栏  ›  技术社区  ›  Matt

用户控件(ascx)中的LinkButton.Command将不调用指定的方法

  •  0
  • Matt  · 技术社区  · 15 年前

    我有以下代码:

       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一起显示。

    此面板包含所有布尔运算符和“.”,表示未设置。 我通过编程在面板中添加布尔运算符作为标签,并且只添加那些与当前设置不匹配的运算符。例如,如果我的标签设置为“和”,当我将鼠标悬停在它上面时,我将显示除“和”之外的所有内容。


    问题是即使我指示他们不要调用linkbutton_命令。 更奇怪的是,如果我去掉“如果”!this.ispostback)在页面加载中,它将调用它。

    我的控件位于更新面板内。

    1 回复  |  直到 15 年前
        1
  •  0
  •   CAbbott    15 年前

    问题是,您正在页面加载事件期间动态添加控件。当发生回发时,这些控件将不存在,每次都需要创建。这就是为什么当你移除你的 如果(!)page.ispostback)页 ,重新构建控件,它可以工作。

    由于您正在将其构建为用户控件,因此您可能希望查找重写 CreateChildControls 方法。