2016-06-09 47 views
0

在一個ASP.Net應用程序中我有一個aspx文件,裏面有一個更新面板,裏面有一個Gridview。在Gridview裏面有一張桌子,裏面還有一些面板。這些面板內有一些控件。在一個GridView中使用JQuery無法找到動態asp:控件

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> 

現在,我寫一個jQuery函數來捕獲爲GridView裏面的按鈕的Click事件,並顯示在彈出窗口的像場。

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會添加一些前綴以使每個ID都不同。爲了消除這個問題,您可以在ItemTemplate中設置控件的'CssClass',並在jQuery選擇器中使用該類名稱而不是ID。 – ConnorsFan

+0

我已經試過了。如果我使用CSS類而不是ID,它會生成所有按鈕的事件,同時沒有規範。我不希望這種情況發生,爲什麼我採取這種方法。 –

+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); 

     }); 

那麼你有沒有,因爲在所有事情都是相對的擔心標識。

+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> 

的javascript:

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

如果我添加代碼的JavaScript藥水它顯示一個JavaScript運行時錯誤 - JavaScript運行時錯誤:對象不支持屬性或方法'對話' –

+0

在您的原始代碼找到按鈕和感興趣的圖像,並硬編碼他們的ID從這一頁。這是爲了測試目的。確保它的工作。 –

相關問題