閱讀929 返回首頁    go 微軟 go windows


簡單的客戶端腳本為gridview“刪除”列添加確認對話框

如何為gridview控件裏的“刪除”列添加一個確認對話框?網上眾說紛紜,大致見到了三種解決方案,現歸納如下:
1、繼承Web.IO裏的button控件,為其實現一個IPostback的接口用於回調,具體代碼之複雜,隻有作者自己想體會吧……
2、在gridview的RowDataBound事件中,遍曆所有子控件,若屬於LinkButton類,且CommandName為“Delete”,就調用其Atributes.Add方法,添加一個onclick事件內含confirm語句,即

lb.Attributes.Add("onclick""return confirm('您真的要刪除此行嗎?')");
這種做法效率低下而且代碼十分不雅。

3、目前已知的最簡潔的方法,如圖,在刪除按鈕的那一列屬性裏麵,把DeleteText屬性設為

<div id="de" onclick="JavaScript:return confirm('確定刪除嗎?')">刪除</div> 

這個太強了,讚一個。

可問題是,.net輸出的html代碼如下:

<href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$GridView1','Delete$0')" style="color:#4A3C8C;"><div id="de" onclick="JavaScript:return confirm('確定刪除嗎?')">刪除</div></a> 
為什麼內層<div>的onclick事件所返回的bool值能影響到外層<a>標簽的的語句是否被執行呢?
仔細想了想,以前用asp直接寫的刪除標簽是這個樣子的:
<href="deleteUser.asp?id=xxx"  onclick="return confirm('確定刪除嗎?')">刪除</a> 
也就是說,onclick事件接受一個bool值,其決定了click事件是否被觸發。若click事件沒有被觸發,href內含的跳轉動作就不會生效。同理,之前的那段代碼中,<div>在<a>中,隻有先觸發<div>的click事件,<a>的跳轉動作才會生效。而我們在<div>的onclick事件中若選擇為其賦值false,隨即取消了<div>的click事件,也同時取消了<a>的跳轉。

之後,新的問題又來了。如果我們的CommandField中ButtonType是Button的話,這段代碼就失效了。我想了下,可以通過將其轉換為模板列的方式來解決。
先將該字段轉換成模板,然後編輯這個模板列,選中用於刪除的Button,將其onClientClick屬性設為
return confirm('您確認刪除要刪除麼?')
即可。

最後更新:2017-04-02 00:06:38

  上一篇:go datalist自定義列表的使用心得
  下一篇:go .NET 開發人員該下載的十個必備工具