Как найти элемент управления внутри календарного элемента управления asp.net

После добавления элемента управления в событие 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 ответа

Решение

Этот ответ объясняется тем, что вышеупомянутый комментарий Росса показал мне, что я мог бы использовать 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];
    }

Проблема заключалась в том, что элемент управления не был добавлен на страницу до метода dayrender, то есть вы не могли получить ссылку на него в ответном сообщении. Используя коллекцию Page.Request.Params, OP смог получить значение из обратной передачи.


Проблема в том, что элемент управления find не является рекурсивным, и требуемый элемент управления, вероятно, находится внутри другого элемента управления.

Здесь показано, как создать рекурсивный метод поиска, который помог бы: http://stevesmithblog.com/blog/recursive-findcontrol/

В качестве альтернативы, если вы разместите код управления календарем, я, вероятно, смогу вам помочь немного больше

Росс

Другие вопросы по тегам