[英]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);
}
我以前曾通过动态控件实现过此功能。 使用相同的对象引用创建多个项目似乎使事情变得混乱。 尝试创建一个从LinkButton继承的类,并在您的读取循环中使用它。
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.