2016-06-09 5 views
0

ASP.Net 응용 프로그램에서 내부에 Gridview가있는 업데이트 패널이있는 aspx 파일이 있습니다. Gridview 내부에는 또한 일부 패널이 포함 된 테이블이 있습니다. 이 패널 안에는 몇 가지 컨트롤이 있습니다.동적 ASP를 찾을 수 없습니다 : JQuery를 사용하여 Gridview 내부 제어

ASPX

<asp:Gridview ID="GridView1" runat = "server"...> 
<Columns> 
    <asp:TemplateField ShowHeader="False"> 
    <ItemTemplate> 
    <table> 
     <asp:Panel ID="pnlVisualAst" runat="server" Visible="false"> 
       <tr> 
       <td style="text-indent: 50px; width: 25%"> 
        <asp:Label ID="lblVisAst" runat="server" Text="Visual Assitance"></asp:Label> 
       </td> 
       <td colspan="3"> 
        <asp:Button ID="btnVisAst" class="button" runat="server" Text="View"/> 
        <asp:Image ID="popImg" ImageUrl='<%# GetImage(Eval("VA_Img"))%>' runat="server" Visible="false" /> 
       </td> 
       </tr> 
     </asp:Panel> 
    </table> 
    </ItemTemplate> 
    </asp:TemplateField > 
</Columns> 
</asp:Gridview> 

지금, 나는이 GRIDVIEW 내부 버튼의 클릭 이벤트를 캡처하고 팝업 창에서 이미지 필드를 표시 할 JQuery와 함수를 쓰고 있어요.

JQuery와

<script type="text/javascript"> 

    $(document).on('ready', function() 
    { 
     var prm = Sys.WebForms.PageRequestManager.getInstance(); 
     prm.add_endRequest(function() 
     { 
      $('#<%=GridView1.ClientID%>').find($('#<%= btnVisAst.ClientID %>')).click(function() 
      { 
       $('#<%=popImg.ClientID%>').dialog 
        ({ 
         title: "my jquery popup", 
         width: 430, 
         height: 200, 
         modal: true, 
         button: 
          { 
           Close: 
           function() 
           { 
            $(this).dialog('Close'); 
           } 
          } 
        }); 
       $(this).prop('checked', true); 

      }); 
     }); 

    }); 

상기 코드 문제는 그 내부 GRIDVIEW 동적 제어를 찾을 수있다. 'btnVisAst'및 'popImg'가 현재 컨텍스트에 존재하지 않음을 보여줍니다.

이 문제를 해결할 수있는 방법이 있습니까? 감사합니다. .

+0

항상의 GridView 항목에서 컨트롤 ID와 함께 작동하도록 복잡하다. 각 항목에는 하나의'btnVisAst'가 있고 각 ID는 HTML 출력에서 ​​고유해야하므로 ASP.NET은 각 접두사를 다른 것으로 만들기 위해 일부 접두사를 추가합니다. 이 문제를 해결하려면 ItemTemplate에있는 컨트롤의 'CssClass'를 설정하고 ID 대신 jQuery 선택기에서 해당 클래스 이름을 사용할 수 있습니다. – ConnorsFan

+0

나는 이미 그것을 시도했다. ID 대신 CSS 클래스를 사용하면 모든 버튼에 대한 이벤트가 동시에 생성됩니다. 나는 왜 나는이 접근법을 취하고있는 이드가 그렇게되기를 원하지 않는다. –

+0

그리고 ID를 사용하여 jQuery 선택기로 어떤 항목을 타겟팅 했습니까? – ConnorsFan

답변

2

나는 ConnorsFan에 동의합니다. 클래스를 대신 사용하십시오. 당신이 당신의 방문을 버튼에 클래스를 적용하면, 당신은 같은 것을 할 수있다 "classVisAst을"말 :

$('.classVisAst').click(function() 
     { 
      var newDialog = $(this).siblings("img").dialog 
       ({ 
        title: "my jquery popup", 
        width: 430, 
        height: 200, 
        modal: true, 
        button: 
         { 
          Close: 
          function() 
          { 
           $(this).dialog('Close'); 
          } 
         } 
       }); 
      $(newDialog).dialog('open'); 

      $(this).prop('checked', true); 

     }); 

그런 다음 당신이 모든이 상대적 모든 때문에 ID를 걱정 아닙니다.

+0

하지만 ID 대신 클래스를 사용하면 모든 컨트롤에 대해 버튼 이벤트가 발생합니다. 우리는 Gridview 내부에 4 개의 버튼이 있다고 가정하고 1 버튼을 클릭하면 4 개의 버튼이 있고 4 개의 버튼이 있고 각 버튼마다 4 개의 그림이 표시됩니다. –

+1

이미지에도 수업을 사용하고 있습니까? 이미지를 전혀 변경할 필요가 없습니다. 내 예제에서는 이미지에 클래스를 적용하는 대신 형제 함수를 사용합니다. 귀하의 초기 코드에서 각 버튼 하나의 이미지가있는 것처럼 보입니다. 그렇지 않은가요? –

+0

어떻게하면 동적 ASP : 이미지 컨트롤에서이 버튼을 클릭하여 찾을 수 있습니다. 이미지 자체가 동적 ASP : 모든 gridview 테이블 행과 함께 변경되는 이미지 컨트롤. –

1

버튼을 검색하는 대신 기능을 할당합니다.

<asp:Gridview ID="GridView1" runat = "server"...> 
<Columns> 
    <asp:TemplateField ShowHeader="False"> 
    <ItemTemplate> 
     <asp:Panel ID="pnlVisualAst" runat="server" Visible="false"> 
    <table><%--put table inside panel else you will have empty table element --%> 
       <tr> 
       <td style="text-indent: 50px; width: 25%"> 
        <asp:Label ID="lblVisAst" runat="server" Text="Visual Assitance"></asp:Label> 
       </td> 
       <td colspan="3"> 
        <asp:Button ID="btnVisAst" OnClientClick="return doSomething(this)" class="button" runat="server" Text="View"/> 
        <asp:Image ID="popImg" ImageUrl='<%# GetImage(Eval("VA_Img"))%>' runat="server" Visible="false" /> 
       </td> 
       </tr> 
    </table> 
     </asp:Panel> 
    </ItemTemplate> 
    </asp:TemplateField > 
</Columns> 
</asp:Gridview> 

자바 스크립트 :

function doSomething(elem){//elem == input[type=submit] 
    $('#'+ elem.id.replace('btnVisAst','popImg')).dialog 
     ({ 
      title: "my jquery popup", 
      width: 430, 
      height: 200, 
      modal: true, 
      button: 
       { 
        Close: 
        function() 
        { 
         $(this).dialog('Close'); 
        } 
       } 
     }); 
    $(elem).prop('checked', true); 
    return false; 
} 
+0

좋은 관찰 : 패널과 행 사이에 패널을 삽입 할 수 없습니다. – ConnorsFan

+0

코드의 자바 스크립트 묘약을 추가하면 자바 스크립트 런타임 오류가 발생합니다 - 자바 스크립트 런타임 오류 : 객체가 속성 또는 메서드 '대화 상자'를 지원하지 않습니다 –

+0

원래 코드에서 버튼과 관심있는 이미지를 찾고 해당 ID를 하드 코드합니다. 그 페이지. 이것은 시험 목적을위한 것입니다. 작동하는지 확인하십시오. –