2010-05-26 2 views
0

Мне нравится знать, как получить ClientID/UniqueID элемента управления внутри элемента управления ViewView Элемент EditItemTemplate, а при изменении элемента DetailsViews в режиме редактирования и DetailsView находится внутри AJAX UpdatePanel. Без UpdatePanel во время PostBack я могу получить контроль ClientID, но теперь с UpdatePanel.Получить элементы управления ClientID/UniqueID между DetailsView и 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 is null:

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

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

+0

Это опечатка в ваше событие ModeChanged в FindControl, оно ищет chkxboxTest ...? Если это ваш код, это может быть проблемой. – Mantorok

+0

@ Манторок. извините опечатка. Но все равно null. – robertpnl

+0

Итак, попробуйте строки [0] .Cells [0] .FindControl. – Mantorok

ответ

2

Хорошо, лучше всего сделать, это реализовать обработчик 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

Привет Манторок. Спасибо! Это решит мою проблему. Во время этого события элемент управления будет найден. Спасибо за ваше время и ответы! – robertpnl

0

недействительными DetailsView1_ModeChanged (объект отправителя, EventArgs е) { , если (DetailsView1.CurrentMode == DetailsViewMode.Edit) вар chkbox = DetailsView1.Rows [0] .FindControl ("chkxboxTest"); // < == is null }

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

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

UPDATE: Я предполагаю, что все, что вы хотите сделать, - это захват элемента управления после того, как пользователь обновил элементы? Назначение обработчика событий для OnItemUpdating и попробуйте следующее:

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

Извините, опечатка, событие изменено, но все еще равно нулю. – robertpnl

+0

Привет @Mantorok. Ваша информация о обновлении полезна. Она работает ... но событие ItemUpdating будет если вы используете, нажмите кнопку обновления/кнопку активации. И, извините, что вам нравится, я хотел бы получить идентификатор клиента во время изменения режима в Edit, чтобы я мог инициализировать javascript во время режима редактирования. – robertpnl

+0

robertpnl. (0). – Mantorok