2013-07-08 44 views
0

考慮下面的GridView控件代碼:ASP.NET的GridView ItemTemplate中的LinkBut​​ton支持RowCommand後的JavaScript確認

<asp:GridView ID="gvReq" runat="server" DataSourceID="objdsReq" > 
    <Columns> 
    <asp:TemplateField HeaderText="Control"> 
     <ItemTemplate> 
     <asp:LinkButton ID="lbdelete" runat="server" CommandArgument='<%# Container.DataItemIndex %>' ForeColor="Red" CommandName="DeleteReq">Delete</asp:LinkButton> 
     </ItemTemplate> 
    </asp:TemplateField> 
    </Columns> 
</asp:GridView> 
<asp:ObjectDataSource ID="objdsReq" runat="server" SelectMethod="GetDataTable" > 
    <%-- parameter list --%> 
</asp:ObjectDataSource> 

在RowDataBound事件,JavaScript代碼被添加:

Protected Sub gvReq_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvReq.RowDataBound 
    If (e.Row.RowType = DataControlRowType.DataRow) Then 
    Dim lbdelete As LinkButton = e.Row.Cells(DELETE_CELL).Controls.Item(1) 
    lbdelete.Attributes.Add("onclick", "javascript:if(confirm('Are you sure you want to delete?')){return true}else{return false}") 

JavaScript的火災,但RowCommand事件永遠不會觸發 - 我猜是因爲它只能由JavaScript處理:

Protected Sub gvReq_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) Handles gvReq.RowCommand 
    Dim dataItemIndex As Integer = Convert.ToInt32(e.CommandArgument) 
    Dim reqID As Integer = Convert.ToInt32(gvReq.DataKeys(dataItemIndex).Values(0)) 
    If e.CommandName = "DeleteReq" Then 

JavaScript確認對話框由管理員提出要求。

現在,如果有人點擊OK到JavaScript確認框,我該如何獲取RowCommand事件處理程序?

+0

http://stackoverflow.com/q/17622718/153923 – jp2code

回答

3

你能使用的的OnClientClick屬性LinkButton而不是在012上添加屬性?

此外,它似乎並沒有實際上在網格視圖上設置onrowcommand屬性。

E.g:

<asp:GridView ID="gvReq" runat="server" DataSourceID="objdsReq" OnRowCommand="gvReq_RowCommand"> 
    <Columns> 
    <asp:TemplateField HeaderText="Control"> 
     <ItemTemplate> 
     <asp:LinkButton ID="lbdelete" runat="server" 
      CommandArgument='<%# Container.DataItemIndex %>' 
      ForeColor="Red" 
      CommandName="DeleteReq" 
      OnClientClick="return confirm('Are you sure you want to delete?');" 
      >Delete</asp:LinkButton> 
     </ItemTemplate> 
    </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

我beleive的JavaScript起着回發了很大的作用的鏈接按鈕,因此添加該行數據綁定的OnClick我會影響回傳的JavaScript。

另外,請查閱這篇文章出來這樣做,而不是使用defaul JavaScript的confirm的輕微的「票友」的方式:http://mattberseth.com/blog/2007/07/confirm_gridview_deletes_with.html

+0

我遵循這樣做的更好的方式,但是我的'RowCommand'方法仍然沒有被觸發。我的網格中的項目被刪除;但由於我的方法永遠不會觸發,該項目仍然存在於數據庫中。 – jp2code

+0

也許值得說明的是,GridView中的行被刪除。它只是不會刪除數據庫,因爲它永遠不會觸發'RowCommand'方法。 – jp2code

+1

看起來你沒有連線行命令事件。看修改後的答案。 –

1

試着改變按鈕的CommandName的以 「刪除」

UPDATE:的

代替

lbdelete.Attributes.Add("onclick", "javascript:if(confirm('Are you sure you want to delete?')){return true}else{return false}") 

嘗試

lbdelete.OnClientClick = "javascript:if(confirm('Are you sure you want to delete?')){return true;}else{return false;}" 
+0

有什麼東西,這會實現嗎?在改變HTML中的CommandName後,我需要改變RowCommand事件處理程序後面代碼中的CommandName字段。 – jp2code

+0

「數據綁定控件識別某些命令名稱並自動提升並處理適當的控件事件,下列命令名稱被識別......」[link](http://msdn.microsoft.com/zh-cn/庫/ system.web.ui.webcontrols.buttonfield.commandname.aspx) – mtzaldo

+0

這顯然有些事情,但現在我有JavsScript錯誤** Sys.WebForms.PageRequestManagerServerErrorException:刪除不支持ObjectDataSource'objdsReq',除非DeleteMethod是指定。** – jp2code

相關問題