C#中动态创建的链接按钮

3
我的问题是我动态创建了一个表格,其中每个单元格都包含一个链接按钮,当点击该按钮时,该单元格应该从表格中移除。 (它比这更复杂,但我不会进入这些细节,只是说绕过去行不通)我阅读了一些关于此事的帖子,通常提到控件必须在页面加载或之前重新制作。我已尝试从页加载、页初始化和预初始化运行运行setCellContent的方法,但_lnkBntRemoveSlotFromTable_Click方法从未被调用,因为链接按钮被点击。我开始怀疑除了控件何时创建/重新创建之外还有别的问题。
对于表中的每个单元格,执行以下操作:
private TableCell setCellContent(string day, DateTime timeOfDay){
    TableCell newCell = new TableCell();
    LinkButton lb = new LinkButton();
    lb.ID = (++global_counter_id).ToString();
    lb.Text = timeOfDay.ToShortTimeString();
    lb.CommandArgument = timeOfDay.ToString();
    lb.Command += new CommandEventHandler(_lnkBntRemoveSlotFromTable_Click);
    newCell.Controls.Add(lb);
    return newCell;
}

我希望被称为的方法:

public void _lnkBntRemoveSlotFromTable_Click(object sender, CommandEventArgs e)
{
    //1. Make changes to the table
}

但是这个方法从未被调用。

这个表格本身会在每次回传时重新创建吗? - ConnorsFan
是的。表格和所有链接按钮都已按照预期创建。 - Robert-99
点击 LinkButton 后,它会消失吗? - ConnorsFan
没有任何反应。表被重新创建,应该修改表的方法从未被调用,因此表保持不变。唯一缺少的是lnkbtnremoveslotfromtable_click运行。 - Robert-99
1个回答

1

最终让它工作了。做了一些更改才使其工作。这当然与表格何时创建以及如何创建ID有关。对于其他人的建议,以下是一个有效的示例。确保动态控件的ID在页面加载时保持不变。

public partial class _default : System.Web.UI.Page
    {
        static int i = 0;

        protected override void OnInit(EventArgs e)
        {
        base.OnInit(e);
            LinkButton lb = new LinkButton();
            lb.ID = "id";
            lb.Text = "Click me";
            lb.CommandArgument = "argument";
            lb.Command += new CommandEventHandler(method_to_call);
            this.Panel.Controls.Add(lb);
        }

        private void method_to_call(object sender, CommandEventArgs e)
        {
            i++;
            this.Label.Text = i.ToString();
        }

        protected void Page_Load(object sender, EventArgs e)
        {

        }

    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接