我有以下代码:
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'之外的所有内容。
问题是,即使我指示他们,也从不调用linkButton_Command。
更奇怪的是,如果我在页面加载中删除'if(!this.IsPostBack),它会调用它。
我的控件位于updatePanel内。
答案 0 :(得分:0)
问题是您在Page_Load事件期间动态添加控件。当发生回发时,这些控件将不会存在,并且每次都需要创建。这就是为什么当您删除 if(!Page.IsPostBack)并重建控件时,它会起作用。
由于您将其构建为用户控件,因此您可能希望重新调整CreateChildControls方法。