【问题标题】:C# LinkButton created dynamically problemC# LinkBut​​ton 动态创建问题
【发布时间】:2020-01-21 23:40:38
【问题描述】:

我在我的代码中使用这个动态创建了一个链接按钮:

LinkButton linkPDFQ = new LinkButton();
linkPDFQ.ID = "linkPDF";
linkPDFQ.CommandArgument = fisrtArg + ";" + secondArg;
linkPDFQ.Text = fisrtArg;
linkPDFQ.Command += new CommandEventHandler(PDFCLink_Action);
row.Cells[0].Controls.Add(linkPDFQ);

行来自 GridViewRow 并且 CommandEventHandler 是这个

protected void PDFCLink_Action(object sender, CommandEventArgs e)
{
   string[] arg = new string[2];
   arg = e.CommandArgument.ToString().Split(';');

   string arg1 = arg[1];
   string arg2 = arg[2];
   Response.Write("<script>alert('" + arg1 + arg2 "'); </script>");
}

只看我是否点击了链接按钮,然后我会收到警报...但什么也没有! 链接按钮不起作用... 我用类似的代码从aspx开始制作了另一个linkBut​​ton,一切顺利,因为在apsx中我可以使用在aspx.cs中无法使用的方法OnCommand。 我错过了什么或哪里出错了? 如何在 cs 文件中替换 OnCommand? 谢谢

【问题讨论】:

    标签: c# asp.net linkbutton


    【解决方案1】:

    下面的代码运行良好。我在代码中发现了几个错误并已修复,请参阅下面的 cmets。

    protected void Page_Load(object sender, EventArgs e)
    {
        // some dummy values
        var fisrtArg = "First arg 1";
        var secondArg = "SEcond arg 2";
    
        LinkButton linkPDFQ = new LinkButton();
        linkPDFQ.ID = "linkPDF";
        linkPDFQ.CommandArgument = fisrtArg + ";" + secondArg;
        linkPDFQ.Text = fisrtArg;
        linkPDFQ.Command += new CommandEventHandler(PDFCLink_Action);
    
        // Temporarily adding to the panel - But you can add it to your row cell
        Panel11.Controls.Add(linkPDFQ);
    }
    
    protected void PDFCLink_Action(object sender, CommandEventArgs e)
    {
        string[] arg = new string[2];
        arg = e.CommandArgument.ToString().Split(';');
    
        // I found errors in arg indexes.
        //string arg1 = arg[1]; This should be arg[0]
        //string arg2 = arg[2]; This should be arg[1]
    
        // You are missing a '+'  next to the arg2
        //Response.Write("<script>alert('" + arg1 + arg2 "'); </script>");
    
        // working code
        string arg1 = arg[0];
        string arg2 = arg[1];
        Response.Write("<script>alert('" + arg1 + arg2 + "'); </script>");
    }
    

    除此之外,您实现的 CommandEventHandler 是正确的。请让我知道它是否有效。

    【讨论】:

      【解决方案2】:

      只是一个警告。动态创建的控件是个坏主意。它们在每次回发中被销毁并重新创建。因此,当您单击事件被触发并发生回发时,这会导致动态按钮被销毁并重新创建。当发生这种情况时,您的事件处理程序中发生的任何事情都会被忽略,因为触发事件的原始按钮已被破坏。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 2011-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多