在dayrender事件中添加控件后,有没有办法在以后找到控件?我试过了
calendar.FindControl("lblSample")
但没有成功。
以下是我的一些代码要更清楚:
protected void calSample_DayRender(object sender, DayRenderEventArgs e)
{
Label lblSample = new Label();
lblSample.ID = "lblSample";
lblSample.Text = "Sample";
e.Cell.Controls.Add(lblSample);
}
在一天渲染事件和页面完全加载后,我有一个链接按钮事件,我尝试将控制权恢复
protected void lbtnSave_Click(object sender, EventArgs e)
{
//Not working
Label lblSample = calSample.FindControl(lblSample);
//Also can't get to work, this was using Ross' suggestion and the recursive find function he wrote about. I'm probably just not using it correctly.
Label lblSample = ControlFinder.FindControl<Label>(calSample, "lblSample");
}
答案 0 :(得分:1)
问题是因为在dayrender方法之前控件没有添加到页面中 - 这意味着你无法在帖子后面获得对它的引用。使用Page.Request.Params集合,OP能够在回发中获取值。
问题是find控件不是递归的,你想要的控件可能在另一个控件中。
这将向您展示如何制作一个有用的递归查找控制方法:http://stevesmithblog.com/blog/recursive-findcontrol/
或者,如果您发布日历控件代码,我可能会帮助您更多。
罗斯
答案 1 :(得分:0)
这个答案是因为罗斯上面的评论告诉我,我可以使用Page.Request.Params找到我追求的价值。这不是最干净的解决方案,但它有效!
如果您在日期渲染事件中向日历控件添加下拉列表
protected void calSample_DayRender(object sender, DayRenderEventArgs e)
{
DropDownList ddlSample = new DropDownList();
ddlSample.ID = "ddlSample";
ddlSample.DataSource = sampleDS;
ddlSample.DataBind();
e.Cell.Controls.Add(ddlSample);
}
你可以像这样得到所选择的值,当然我需要进行更多检查来验证下拉列表是否存在,但是你得到了图片
protected void lbtnSave_Click(object sender, EventArgs e)
{
string sampleID = Page.Request.Params.GetValues("ddlSample")[0];
}