невозможно получить asp: идентификатор флажка для jquery в .net c # - PullRequest
1 голос
/ 28 июня 2011

Кто-нибудь знает, что здесь происходит? У меня есть следующий код в моем файле aspx:

<tr>   
    <th class="graytext r">Add Reps to Team:</th>
    <td>           
     <asp:GridView ID="grid" runat="server" AutoGenerateColumns="False" DataKeyNames="EmployeeID" DataSourceID="dsEmployees" EnableViewState="false" GridLines="None" CssClass="clGridDirectory">
            <Columns>
              <asp:TemplateField >
                <ItemTemplate>
                  <asp:CheckBox runat="server" ID="employee_name" Text='<%# Eval("fullname") %>'/> 
                  <asp:HiddenField runat="server" ID="employeeidToRep" Value='<%# Eval("employeeid") %>'/>
                  <asp:TextBox runat="server" ID="repID" Text='<%# Eval("rep_id") %>'  CssClass="cl_required_for_sale" data-messages="{required:'required'}" />
                  <asp:RequiredFieldValidator ID="reqvrepID" runat="server" ControlToValidate="repID" Display="Dynamic" EnableClientScript="true" ErrorMessage="required" />
                </ItemTemplate>
              </asp:TemplateField>
            </Columns>
          </asp:GridView>
       <asp:SqlDataSource ID="dsEmployees" runat="server" ConnectionString="<%$ ConnectionStrings:TestConnectionString %>" SelectCommand="app_staff_without_team_select" SelectCommandType="StoredProcedure">
      </asp:SqlDataSource>        
    </td>
</tr> 

Я пытаюсь получить предупреждение, когда пользователь нажал на флажок, используя следующий код:

<script type="text/javascript">
    $('#<%= employee_name.ClientID %>').change(function () {
        alert('bingo')
    });
</script>

Но как-то появляется сообщение об ошибке при попытке запустить страницу:

Compilation Error 
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS0103: The name 'employee_name' does not exist in the current context

Source Error:    

Line 121:  <script type="text/javascript">
Line 122:      $('#<%= employee_name.ClientID %>').click(function () {

Кто-нибудь знает, что не так с моим кодом jQuery? Как я мог получить только идентификатор флажка для jQuery?

Ответы [ 5 ]

1 голос
/ 28 июня 2011

Вместо использования идентификатора CheckBox (который в любом случае не подходит внутри шаблона), используйте Checkbox.CssClass, например:

CssClass="employee_name"

Затем, в jQuery, селектор равен '.employee_name',например:

$('.employee_name').click(function() { alert('id: ' + this.id); });
1 голос
/ 28 июня 2011

Вы также можете использовать

<asp:TemplateField>
    <ItemTemplate>
        <asp:CheckBox onclick="javascript:alert('clicked')" runat="server" ID="employee_name" Text='<%# Eval("fullname") %>' />                       
    </ItemTemplate>
</asp:TemplateField>

Добавить функцию JS на onclick event of CheckBox

0 голосов
/ 05 июля 2011

Поскольку флажок находится в элементе управления, который повторяет данные (повторитель), идентификатор флажков, генерируемых представлением сетки, является динамическим, а не статическим (первая строка будет иметь id = employee_name_0 или отличаться в зависимости от свойства clientIdMode).

Чтобы добавить обработчик событий в флажок, необходимо установить флажок по-разному, eiter по классу css или что-то еще.

Дополнительные примечания: Если вы хотите использоватьдругие элементы управления внутри шаблона элемента нельзя выбрать по их идентификатору по той же причине, по которой вы не можете установить флажок по идентификатору.Для этого вам нужно будет добавить класс css к необходимым элементам управления и добавить селектор, который выберет братьев и сестер в контроллере флажка, которые имеют определенный класс.

0 голосов
/ 28 июня 2011

Я предпочитаю этот способ. Селектор jQuery ниже добавит обработчик событий ко всем флажкам с идентификатором, оканчивающимся на имя сотрудника.

<script type="text/javascript">
        $(document).ready(function () {            
            $(':checkbox[id$="employee_name"]').change(function () {
                alert('bingo');
            });
        });
</script>
0 голосов
/ 28 июня 2011

Прикрепите функцию к флажку «Отметить флажком» код для файла, т.е. событие RowDataBound. вместо того, чтобы делать это напрямую, это не сработает.

или ваш javascript похож на

  protected void GridView1_RowDataBound(object sender, 
                    GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            CheckBox checkBox = (CheckBox) row.FindControl("FordelingCheckBox");

            checkBox.Attributes.Add("onclick","javascript:alert('clicked')");
        }
    }
...