C# LinkButton создал динамически проблему - PullRequest
0 голосов
/ 22 января 2020

Я создал в своем коде ссылку LinkButton, динамически используя это:

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>");
}

только для проверки, если Я нажимаю на ссылку Кнопка, затем я получаю предупреждение ... но ничего !!! LinkButton не работает ... Я сделал еще один linkButton, начиная с aspx, с похожим кодом, и все идет хорошо, потому что в apsx я могу использовать метод OnCommand, который невозможно использовать в aspx.cs. Что мне не хватает или где я допустил ошибку? Как можно заменить OnCommand в файле cs? Спасибо

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Просто предупреждение. Динамически созданные элементы управления - плохая идея. они уничтожаются и воссоздаются в каждом постбеке. Поэтому, когда вы щелкаете по событию, запускается и происходит обратная передача, это приводит к разрушению и повторному созданию кнопки Dynami c. Когда это происходит, все, что происходило в вашем обработчике событий, игнорируется, поскольку исходная кнопка, которая вызвала событие, была уничтожена.

0 голосов
/ 22 января 2020

Код ниже работает нормально. Я нашел пару ошибок в коде и исправил их. Пожалуйста, смотрите комментарии ниже.

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 правильный. Пожалуйста, дайте мне знать, если это работает.

...