ASP.NET Значение идентификатора клиента DataGrid, возвращающее значение null

#javascript #c# #asp.net #datagrid #clientid

#javascript #c# #asp.net #datagrid #идентификатор клиента

Вопрос:

Я вижу, что было много вопросов о получении идентификатора клиента ASP.NET но все вопросы, которые я просмотрел, не помогли моему сценарию. Я немного новичок в ASP.NET и у вас есть проблемы с получением идентификатора клиента DataGrid в JavaScript.

Надеюсь, кто-нибудь на этом форуме поможет мне найти способ.

На моей странице aspx я получил datagrid:

  <div class="tblgrid" id="divItems">
    <asp:DataGrid ID="dgItems" runat="server" AutoGenerateColumns="False" GridLines="None">
    <Columns>
         <asp:BoundColumn HeaderText="EmpId" DataField="EmpId">
         </asp:BoundColumn>
         <asp:BoundColumn HeaderText="F_Name" DataField="F_Name">
         </asp:BoundColumn>
         <asp:BoundColumn HeaderText="L_Name" DataField="L_Name">
         </asp:BoundColumn>
         <asp:BoundColumn DataField="City" HeaderText="City">
         </asp:BoundColumn>
         .....
    </Columns>
 

Когда я использую следующее в своем JavaScript, оно возвращает соответствующий внутренний HTML-код таблицы в предупреждающем сообщении.

   alert(document.getElementById('ct100_PageContent_dgItems').innerHTML);
 

но когда я использую ASP.NET ClientID, я получаю исключение с нулевым значением, потому что оно выдает нулевое значение.

   alert(document.getElementById('<%=dgItems.ClientID %>').innerHTML); 
 

Кто-нибудь может мне помочь в этом отношении.

Заранее спасибо.

Комментарии:

1. посмотрите, что на самом деле отображается на странице в этом пункте <%=dgItems.ClientID %> . Возможно, вы вызываете его раньше, и идентификатор еще не создан…

2. ct100_PageContent_dgItems — это идентификатор, который я получаю в источнике страницы в браузере, я использую как консоль браузера Chrome, так и файл javascript, чтобы узнать, возвращает ли он что-нибудь. но null было единственным значением, которое оно предоставляет в данный момент.

3. что-то вы делаете здесь неправильно, и с этим кодом мы не можем его найти. Если у вас может быть это онлайн, мы можем это увидеть, но вам нужно отладить его и найти свою ошибку…

Ответ №1:

Если файл document.getElementById('<%=dgItems.ClientID %>') находится в отдельном файле JS для страницы aspx, тогда ASP.Net engine не сможет разрешить ссылку. Это работает только для сценариев, встроенных в страницу .aspx.

Однако решение заключается в том, что если вы не дублируете сетку данных на странице, вы можете присвоить ей статический идентификатор, используя ClientIDMode="static" :

 <asp:DataGrid ID="dgItems" ClientIDMode="static" runat="server" AutoGenerateColumns="False" GridLines="None">
 

а затем ссылайтесь на него с помощью

 document.getElementById('dgItems')
 

Ответ №2:

Вместо того , чтобы

alert(document.getElementById('<%=dgItems.ClientID %>').innerHTML);

.. вы могли бы присвоить DataGrid CSS-класс, например ‘dgrid’, и использовать селектор классов jQuery, чтобы найти его на стороне клиента?