2009-10-20 110 views
2

我在GridView中有一個ImageButton。ASP.NET ImageButton Onclick事件沒有處理

<asp:GridView ID="ItemGridView" runat="server" DataKeyNames="Id" 
    OnRowDataBound="ItemGridView_RowDataBound" AllowPaging="True" 
    AllowSorting="True" EnableSortingAndPagingCallbacks="True" 
    AutoGenerateEditButton="False" AutoGenerateDeleteButton="false" 
    DataSourceID="ItemDataSource" EnableViewState="true" > 
    .... 
    <asp:TemplateField ShowHeader="False" ItemStyle-Width="40px"> 
     <ItemTemplate> 
     <asp:ImageButton ID="btnDelete" SkinID="btnDelete" 
      runat="server" CausesValidation="false" 
      OnClick="btnDeleteAccountItem_Click" 
      OnClientClick="javascript:return confirm('Are you sure?');" /> 
     </ItemTemplate> 
    </asp:TemplateField> 

和刪除按鈕事件

protected void btnDeleteAccountItem_Click(object sender, EventArgs e) { 
    ImageButton btnDel = sender as ImageButton; 
    GridViewRow row = (GridViewRow)btnDel.NamingContainer; 
    .... 
} 

我在很多地方使用這個非常相同的構造相應的處理程序,它工作正常。我現在有一個GridView,但是,它沒有,我希望得到一些關於如何追蹤問題的想法。 當我點擊按鈕時,客戶端事件觸發,並顯示警告框,然後回火,我可以擊中Page_Load方法中的一箇中斷點。所以按鈕事件的客戶端佈線似乎工作。但是,該事件未處理並且方法btnDeleteAccountItem_Click未被調用。

這是一個複雜的頁面,我無法發佈所有代碼。我能做些什麼來縮小潛在的原因?

+0

你檢查的任何信息在Page_Load中,例如IsPostBack是否爲true或表單集合中的EVENTTARGET值? – 2009-10-20 15:48:40

+0

IsPostBack爲true,表單集合顯示爲空。那是什麼意思? – cdonner 2009-10-20 16:01:28

+0

我應該補充說,GridView位於MultiView控件上,並且表單標籤位於母版頁中。 – cdonner 2009-10-20 16:18:01

回答

5

您的活動定義錯誤ImageButton.Click

protected void btnDeleteAccountItem_Click(object sender, ImageClickEventArgs e) { 
    ImageButton btnDel = sender as ImageButton; 
    GridViewRow row = (GridViewRow)btnDel.NamingContainer; 
    .... 
} 
+0

你是對的,但正如我所說的,代碼在其他頁面上的工作原理,並更改事件參數類型沒有解決問題。在頁面上必須有其他的東西來打破這個。 – cdonner 2009-10-20 17:01:00

+0

您的OnClientClick是否進行除確認之外的其他操作? – 2009-10-20 17:16:20

+0

不,只是彈​​出提示框。 – cdonner 2009-10-20 17:23:14

2

,而不是創建一個按鈕單擊事件,你可以使用DataGrid行命令事件

然後可以使用e.commandName和e.commandArgument找出哪個按鈕被按下和它的參數是什麼:

Private Sub gv1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gv1.RowCommand 
    If e.CommandName = "Whatever" Then 
     // do something 
    End If 

希望它可以幫助

3

我不知道這是否會解決這個問題,但一旦我把一個ASP:按鈕控制在我的標記,太爲它產生的「onClick」的簽名。

然後我改變了主意,決定讓它成爲一個圖像按鈕......我只是自己重寫了標籤。

做出這些改變之後,我意識到的onClick簽名不能正常工作了......經過一番研究,我找到了答案......我用「的EventArgs」而不是「ImageClickEventArgs」 ......

(object sender, ImageClickEventArgs e) 

一旦我改變了事件參數對象,它就像平常一樣開始工作。

+1

取得一些進展 - 修復事件參數後,EVENTTARGET值現在位於表單集合中,它是問題中的圖像按鈕。 – cdonner 2009-10-20 17:06:03

1

確保的CausesValidation設置爲True。

0

你可以試試(你正在創建的ImageButton的錯誤的點擊事件):

<asp:TemplateField ShowHeader="False" ItemStyle-Width="40px"> 
<ItemTemplate> 
    <asp:ImageButton ID="btnDelete" SkinID="btnDelete" runat="server" 
    CausesValidation="false" OnClick="btnDeleteAccountItem_Click" 
    OnClientClick="javascript:return confirm('Are you sure?');" /> 
</ItemTemplate> 
</asp:TemplateField> 

和圖像按鈕有像click事件的變化如下:

protected void btnDelete_Click(object sender, ImageClickEventArgs e) 
{ 
ImageButton btnDel = sender as ImageButton; 
GridViewRow row = (GridViewRow)btnDel.NamingContainer; 
}