ASP.NET MVC 刪除一定要注意寫法!!
- 2009-06-12
- 23983
- 0
以往我們在使用 ASP.NE 的時候作刪除實在是爆簡單的,隨處可刪,隨手可刪,但是如果你有接觸過ASP.NET MVC 看完了官方教學文章後你會有一個很直接的問題 為什麼新增、編輯、更新都有教學就是獨漏〔刪除〕 難道ASP.NET MVC不能刪除嗎?
在我們實做刪除之前,我們要先來了解HTTP的基礎,不過也不需要太深刻,只需要大致了解 Get 和 Post 這兩個 HttpMethod 就可以了,因為 ASP.NET 內建是使用 POST 傳遞資訊,因此他可以很大方的設計好〔刪除〕的功能,但是來到ASP.NET MVC就不太一樣了,沒有明確指定一律都是 Get 傳遞,所以會造成資安問題, Get 和 Post 最直接的差異就是使用者會不會在網址上看到傳遞的資訊,用一個最簡單的例子來解釋比如說 Google 的搜尋結果頁就是一個 利用Get 的時例,所以各位想想所有傳遞的資訊都在網址上可以看到,那如果我們用 Get 來作刪除的動作,可想而知了等於門戶大開,因此刪除一定至少要使用POST來作!!
(標準其實是用Delete)。
那就回來說一下為什麼 ASP.NET 可以幫我們實做好刪除,因為 ASP.NET 所有的內容就是包在一個 Form裡面,但 ASP.NET MVC 可不一樣,那如果說只是為了一個〔刪除〕我就要把他包進 Form 來指定使用 Post 會不會太麻煩也太怪了?,好在 jQuery可以很方便的幫我們處理。
使用jQuery來實做刪除的方式
<input name="delete" type="button" value="刪除" onclick="Delete('<%= Model.ID %>')" />
<script type="text/javascript"> function Delete(id) { if (confirm('你確定要刪除嗎 ?')) { $.post('<%= Url.Action("Delete") %>', { id: id }, function(data, textStatus) { if (data == "1") { alert('刪除成功!'); location.reload(true); } else { alert('Error'); } }, "text"); } } </script>
這樣是很直覺的寫法,但是各位的看的出來,首先我們要對於jQuery有一定的認識,對於CallBack也要了解,對於剛接觸 ASP.NET MVC 這什麼都要自己來的初學者會有一定程度的阻礙。
好加在〔懶是程式設計師的美德〕ASP.NET MVC 有內建 AJAX這應該是大家都了解的了,因此我們利用內建的AJAX Helper 來幫我們完成上面麻煩的寫法。
<%=Ajax.ActionLink("刪除", "Del", "controllerName", new AjaxOptions() { HttpMethod = "Delete", Confirm = "確定要刪除嗎?", UpdateTargetId = "main" })%>
看到沒!!簡單、直覺、標準的AJAX Form ,不拖泥帶水。不過這裡 demo 是用 Delete 這個 HttpMethod 所以後面記得要用
[AcceptVerbs(HttpVerbs.Delete)]
來接。
- Delete 雖然是標準但是會被一些資安軟體擋住(它們太嫩只看的懂 Get 和 Post )因此建議實務上除非明確的知道不然還是使用 Post 就可以了。
- 想要使用 ASP.NET MVC 的內建 AJAX 功能必須要記得載入下面兩個js(順序要對)
- MicrosoftAjax.js
- MicrosoftMvcAjax.js
回應討論