Как найти элемент управления внутри календарного элемента управления asp.net - PullRequest
1 голос
/ 24 октября 2011

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

1 голос
/ 24 октября 2011

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


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

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

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

Ross

0 голосов
/ 09 декабря 2011

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