Получить элементы управления ClientID / UniqueID между DetailsView и UpdatePanel - PullRequest
0 голосов
/ 26 мая 2010

Мне нравится знать, как получить ClientID / UniqueID элемента управления внутри элемента EditItemTemplate элементов управления Detailsview и когда DetailsViews переходят в режим редактирования и DetailsView находятся внутри AJAX UpdatePanel. Без UpdatePanel во время PostBack я могу получить контроль ClientID, но теперь с UpdatePanel.

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:DetailsView ID="DetailsView1" runat="server" DataSourceID="SqlDataSource1" AllowPaging="true" AutoGenerateEditButton="true">
                <Fields>
                    <asp:TemplateField>
                        <EditItemTemplate>
                            <asp:CheckBox runat="server" ID="chkboxTest" Text="CHECKBOX" />
                        </EditItemTemplate>
                    </asp:TemplateField>
                </Fields>
            </asp:DetailsView>
        </ContentTemplate>
    </asp:UpdatePanel>

Как видите, EditItemTemplate содержит элемент управления Checkbox. Поэтому я пытаюсь получить ClientID этого флажка, когда Detailsview переключается в режим редактирования. Мне нужно это значение для обработки Javascript.

Перехват событий ChangingMode / ChangedMode не работает; chkbox пуст:

 void DetailsView1_ModeChanged(object sender, EventArgs e)
    {
        if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
        {
            var chkbox = DetailsView1.FindControl("chkboxTest"); // <==  is null
        }
    }

Может быть, я использую неправильное событие? Кто-нибудь может дать мне совет по этому поводу? Спасибо.

Ответы [ 2 ]

2 голосов
/ 26 мая 2010

Хорошо, лучше всего реализовать обработчик для OnDataBound , а затем сделать что-то вроде:

  protected void databound(object sender, EventArgs e)
  {
     if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
     {
        var control = DetailsView1.Rows[0].Cells[1].FindControl("chkboxTest");
        if (control != null)
        {
           // Write some JS...
        }
     }
  }
0 голосов
/ 26 мая 2010

void DetailsView1_ModeChanged (отправитель объекта, EventArgs e) { if (DetailsView1.CurrentMode == DetailsViewMode.Edit) var chkbox = DetailsView1.Rows [0] .FindControl (" chkxboxTest "); // <== равно нулю } </p>

Является ли зачарованный текст опечаткой?

Я не особо пользовался DetailsView, но заставил нас использовать Rows [0], а не строку заголовка, и есть ли ячейки под строками? Как GridView.

ОБНОВЛЕНИЕ: Я предполагаю, что все, что вы хотите сделать, это захватить элемент управления после того, как пользователь обновил элементы? Присвойте обработчик событий OnItemUpdating и попробуйте следующее:

protected void updating(object sender, DetailsViewUpdateEventArgs e)
{
   var control = DetailsView1.Rows[int.Parse(e.CommandArgument.ToString())].Cells[1].FindControl("chkboxTest");
}
...