2013-01-18 37 views
2

我已經返回一個向用戶請求確認消息的Javascript函數。 的JavaScript函數是如何在GridView命令字段中調用JavaScript函數?

function ConfirmOnDelete() { 
    if (confirm("Are you sure to delete?")) 
     return true; 
    else 
     return false; 

和GridView是象下面這樣:

<asp:CommandField HeaderText="Delete" ShowDeleteButton="True" /> 

在這裏,我想打電話的時候,用戶點擊在GridView命令字段的刪除JavaScript函數。 如何調用此?

回答

6

假設你想繼續使用你的CommandField,您可以使用GridView的OnRowDataBound事件以編程方式執行此操作。

指定的RowDataBound事件的事件處理程序在你的GridView聲明:

<asp:GridView ID="gv" runat="server" OnRowDataBound="gv_RowDataBound".... 
在事件處理

然後(代碼隱藏)找到你的按鈕(在這裏我假設ImageButton,雖然這取決於你的ButtonType財產在您的CommandField)並添加JavaScript到其OnClientClick屬性。

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     ((ImageButton)e.Row.Cells[cell].Controls[ctrl]).OnClientClick = "return confirm('Are you sure you want to delete?');"; // add any JS you want here 
    } 
} 

在上面的例子中,細胞指的是你CommandFieldCTRL的列索引指控制指標如果引用的單元格內(刪除按鈕)。

1

一般來說,你必須指定OnClientClick="return confirm('Are you sure you want to delete ?');"但是,這並不與CommandField中更好地利用工作的TemplateField,這也解釋了更好的http://davesquared.net/2007/10/confirm-delete-for-gridview.html

+0

類型'System.Web.UI.WebControls.CommandField'沒有名爲'OnClientClick'的公共屬性。這將不得不以編程方式添加到單元格中的單元格或刪除按鈕。 – Brissles

+0

是的,我嘗試過,但它顯示錯誤爲「CommandField沒有名爲OnClientClick的公共屬性」。 – thevan

0

使用啓動腳本

ScriptManager.RegisterStartupScript(Page, this.GetType(), "ConfirmOnDelete", "ConfirmOnDelete();", true); 

,或者你也可以使用onclientclick以及

+0

我在gridview rowdeleting事件中嘗試了這個,但它提出了這個問題。但即使我點擊取消,它刪除了該行。 – thevan

3

你最好避免在服務器端請求確認刪除,使用javascript捕捉用戶最終決定,然後到服務器端執行你的邏輯。 CommandField在這裏不是最好的解決方案。

JS:

<script type="text/javascript"> 
    function DeleteConfirm() { 

     if (confirm("Are you sure you want to delete this customer from excluded customer list ?")) { 
      return true; 
     } 
     return false; 
    } 
</script> 

HTML:

  <asp:TemplateField HeaderText=" "> 
       <ItemTemplate> 
        <asp:LinkButton ID="lnk_RemoveFromlist" runat="server" Text="Delete" 
         CommandName="Delete" OnCommand="Delete_Command" CommandArgument='<%# Eval("ID").ToString()' OnClientClick='return DeleteConfirm()'></asp:LinkButton> 
       </ItemTemplate> 
      </asp:TemplateField> 

代碼:

protected void Remove_Command(object sender, CommandEventArgs e) 
{ 
    //Implement your Delete Logic 
} 
+0

不知道你打算通過在這裏關閉代碼塊來實現什麼 - CommandArgument ='<%#Eval(「ID」)。ToString()' – elboffor

2

的取消按鈕具有命令名稱爲 「取消」 和刪除按鈕 「刪除」,檢查

if(e.CommandName == "delete") 
{ 
    //script to delete(); 
} 
else if(e.commandName == "cancel") 
{ 
    //close with some script; 
} 

要調用代碼隱藏javascript函數,

Page.ClientScript.RegisterStartupScript(this.GetType(), "Call my function","loadPopupBox();", true); 
1

可以使用的OnClientClick事件按鈕來調用的功能。例如

<asp:button id="btndelete" runat="server" Text="delete" Onclientclick="if(!ConfirmOnDelete())return false;"/> 
+0

OP指的是,它沒有OnClientClick屬性。 – Futureproof

0

HTML:

<asp:GridView ID="GridView1" runat="server" OnRowDeleting="gv1_RowDeleting"> 
    <Columns> 
     <asp:TemplateField HeaderText="Delete"> 
      <ItemTemplate> 
        <asp:CommandField ShowDeleteButton="true" HeaderText="delete" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

CODE :

protected void gv1_RowDeleting (object sender, GridViewDeleteEventArgs e) 
{ 

    GridView1.Attributes.Add("OnClick", "return confirm('Really wanna delete?');"); 

     // implement your delete logic 

    Response.Write("<script>alert("Delete Successful");</script>"); 

} 

這將調用Javascript函數,當我們點擊GridView中的「刪除」命令字段時,Response.write函數會發出數據已被刪除的警報。您可以在此功能中添加要執行的w​​hwtever功能。