繁体   English   中英

动态Linkbutton的onclick不触发

[英]Onclick of dynamic Linkbutton not firing

我有一个日历控件,我可以在其中单击一天来给我一个JavaScript弹出窗口以添加培训课程。 每天可能会有多个培训课程。 添加类没有问题。 然后在另一页上,我得到了确切的日历控件,但是在每一天中都有动态链接按钮填充培训课程。 单击链接按钮后,我想检索该培训课程的ID,该ID将用于填充标签,并在经理要求为其雇员进行培训时(插入sql时)将此ID作为参考。

我尝试添加一个EventHandler,但这没有触发。 我尝试将Click属性用于此linkbutton(但无法从属性调用方法)...我不确定是否错过了事件处理程序未触发的内容,有人可以帮我吗?

这就是我所做的:日历控件的DayRendering:

    protected void calSchedule_DayRender(object sender, DayRenderEventArgs e)
    {
        bool result = false;

        string filterstring = "SELECT tos.[ID], sc.ServiceCenter, tos.Description " +
                              "FROM [SOS].[dbo].[TrainingOfficerSchedule] tos " +
                              "INNER JOIN [dbo].[TrainingOfficerServiceCenters] sc " +
                              "on tos.ServiceCenterRef = sc.ID " +
                              "WHERE TrainingDate = @TrainingDate";

        cn = new SqlConnection(GetConnectionString());
        SqlCommand myCmd = new SqlCommand(filterstring, cn);
        myCmd.Parameters.AddWithValue("@TrainingDate", e.Day.Date.ToShortDateString());

        cn.Open();
        SqlDataReader myReader = myCmd.ExecuteReader();

        if (myReader.HasRows)
        {
            while (myReader.Read())
            {
                string training = myReader["ServiceCenter"].ToString() + " - " + myReader["Description"].ToString();

                LinkButton lnk = new LinkButton();
                lnk.ID = myReader["ID"].ToString();
                lnk.ForeColor = Color.FromArgb(64, 64, 64);
                lnk.BackColor = Color.FromArgb(192, 192, 192);

                lnk.Attributes.Add("onclick", "return getItems();");
                lnk.Click += new EventHandler(lnk_Click);
                  //lnk.Attributes.Add("onClick", "return getItems();");
                  //lnk.Attributes.Add("OnClientClick", "return getItems();");
                  //lnk.Attributes.Add("onclick", jsMethod(Convert.ToInt32(myReader["ID"])));
                  //lnk.Click += new EventHandler(this.lnk_Click);
                  //lnk.Atributes.Add("runat", "server");
                  //lnk.Attributes.Add("onclick", jsMethod(myReader["ID"].ToString()));
                lnk.Text = training + "<br/><br/>";
                lnk.Style.Add("cursor", "pointer");
                e.Cell.Controls.Add(lnk);
            }
        }
        cn.Close();
    } 

单击链接按钮时将触发事件处理程序:

    public void lnk_Click(object sender, EventArgs e)
    {
        string ctrlId = ((Control)sender).ID;
        txtMManagerName.Text = ctrlId;
        this.Page.ClientScript.RegisterStartupScript(this.GetType(), "popSchedular", "showSchedular();", true);
    }

也许我做错了什么?

将PlaceHolder放到要显示链接按钮的位置,然后尝试。

<asp:PlaceHolder ID="ph" runat="server" />


LinkButton lnk = new LinkButton();
            lnk.ID = myReader["ID"].ToString();
            lnk.ForeColor = Color.FromArgb(64, 64, 64);
            lnk.BackColor = Color.FromArgb(192, 192, 192);
            lnk.Attributes.Add("onclick", "return getItems();");
            lnk.Click += new EventHandler(lnk_Click);
            lnk.Text = training + "<br/><br/>";
            lnk.Style.Add("cursor", "pointer");
            ph.Controls.Add(lnk);

protected void lnk_Click(object sender, EventArgs e)
{
    string ctrlId = ((Control)sender).ID;
    txtMManagerName.Text = ctrlId;
    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "popSchedular", "showSchedular();", true);
}

我以前曾通过动态控件实现过此功能。 使用相同的对象引用创建多个项目似乎使事情变得混乱。 尝试创建一个从LinkBut​​ton继承的类,并在您的读取循环中使用它。

public class myButton : LinkButton
{
    public myButton(SqlCommand sqlCmd)
    {
        var myReader = (SqlDataReader) sqlCmd.ExecuteReader();
        var training = myReader["ServiceCenter"].ToString() + " - " + myReader["Description"].ToString();
        ID =myReader["ID"].ToString();
        ForeColor = Color.FromArgb(64, 64, 64);
        BackColor = Color.FromArgb(192, 192, 192);

        Attributes.Add("onclick", "return getItems();");
        Click += new EventHandler(lnk_Click);
        Text = training + "<br/><br/>";
        Style.Add("cursor", "pointer");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM