1

动态控件的新手,但直到现在我一直在我的 gridview 的模板字段中成功创建它们,最近从超链接切换到链接按钮并且不得不进行一些更改但仍然无法正常工作

在我的页面中,我有以下代码(精简为突出部分)

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        ...
        ...
        TemplateField tf = new TemplateField();
        tf.HeaderText = "Action";
        tf.ItemTemplate = new AssignPage.MyTemplate(..., mylb);
        GridView1.Columns.Add(tf);


protected void Page_PreInit(object sender, EventArgs e)
{
    LinkButton lb = new LinkButton();
    lb.Text = "AssignAll";
    lb.Command += new CommandEventHandler(AssignAll_Click);
    lb.CommandName = "XXX";
    this.mylb = lb;




protected void AssignAll_Click(object sender, CommandEventArgs e)   
{
    string[] arg = new string[2]; // BREAK POINT HERE
    arg = e.CommandArgument.ToString().Split(';');
    ...
    ...
    Response.Redirect("BaseAndRepeats.aspx?id=" + r.Event.ID);

在我有的模板类中

    LinkButton lb;

    public MyTemplate(..., LinkButton _lb)
    {
        ...
        lb = _lb;
        ...



    public void InstantiateIn(System.Web.UI.Control container)
    {
            ...
            ...
            // various conditional statements

            lb.CommandArgument = mylist[rowCount].ReqtID.ToString() + ";" + mylist[rowCount].RotaUser;
            container.Controls.Add(lb);
            ...

处理程序中的断点永远不会到达

我以为我在正确的位置创建了链接按钮,当我单击链接按钮时,链接按钮非常高兴地出现在网格中,调用了 Page_PreInit 和 Page_Load 并且正如我预期的那样,它是一个回发。但是永远不会调用 AssignAll_Click。

在浏览器页脚中,当您将鼠标悬停在按钮链接上时,它会显示“javascript: __dooPsotabck(...”

4

1 回答 1

1

我相信问题出在这一行:

lb.Command += new CommandEventHandler(AssignAll_Click);

将其更改为:

lb.Command += AssignAll_Click;

编辑:您也想将它从Page_PreInitto移动,Page_Init但您可能会发现它在Page_Load(外部IsPostBack)中更成功。这是一个对我有用的例子:

在 ASPX 页面上:

<asp:Panel ID="TestPanel" runat="server" />

代码隐藏:

protected void Page_Init(object sender, EventArgs e)
{
    //Init used because TestPanel doesn't exist yet
    CreateTestButton();
}

private void CreateTestButton()
{
    var lb = new LinkButton();
    lb.Text = "hello";
    lb.Command += lb_Command;
    TestPanel.Controls.Add(lb);
}

void lb_Command(object sender, CommandEventArgs e)
{
    throw new NotImplementedException();
}

查看您的代码,看起来您在 GridView 中添加了另一列,并在该列中为每一行创建了一个按钮 - 但是您已经添加了该列,Page_Load并且之前已创建并绑定到该列Page_PreInit

于 2015-02-05T16:02:12.517 回答