Как найти элемент управления внутри календарного элемента управления 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/
В качестве альтернативы, если вы разместите код управления календарем, я, вероятно, смогу вам помочь немного больше
Росс