如何在asp.net日历控件中查找控件

时间:2011-10-24 14:41:30

标签: c# asp.net .net findcontrol

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

2 个答案:

答案 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];
    }