ASP.NET MVC圖片管理(刪除)


上星期有寫了一篇《ASP.NET MVC圖片管理(上傳,預覽與顯示)http://www.cnblogs.com/insus/p/4620420.html 它只實現了上傳功能,即時預覽以及顯示功能。今天我們來完成刪除功能。

由於圖片是以二進制存儲在數據庫中,這樣刪除是很方便的。只需刪除數據庫記錄即可。

先在數據庫創建一個存儲過程:

CREATE PROCEDURE [dbo].[usp_ImageStore_Delete]
(
    @ImageStore_nbr INT
)
AS
DELETE FROM [dbo].[ImageStore] WHERE [ImageStore_nbr] = @ImageStore_nbr
GO
View Code


在實體Entity中創建刪除方法,程序與數據庫溝通。


接下來,還需要在控制器創建Action操作:



在#70代碼中,由於我們使用鏈接來實現刪除,沒有post數據,因此操作不使用屬性HttpPost。如果你使用的話,刪除會有異常:The resource cannot be found.



好了,在視圖中,數據顯示表,添加一列,如下高亮部位:


演示一下:

 

 

一點就刪除了,再正常不過了,這樣的設計沒有半點人性化,讓用戶有確認或是后悔的選擇。在刪除的鏈接中,添加多一個參數htmlAttributes:



再看看效果:

 

 
一筆一筆記錄刪除,似乎有點不過隱,Insus.NET下面做一個批量刪除演示。
實現這個功能,需要考慮一下,怎樣處理選擇的記錄的主鍵值,收集與存儲,以何方式傳入至數據中去。ASP.NET MVC 做銨鈕刪除:

<input id="Button1" type="button" value="Delete" />


已經不是ASP.NET Form的Web Control。這是客戶端標簽,那就使用jQuery實現吧。

我們還是按上面的順序,先在數據庫層入手,寫存儲過程或處理傳入的字符串開始。由於我們傳入的字符串,如“2,5,4,10,25” ,寫一個函數,把這些字符轉換為一張數據表:



好了,寫一個存儲過程,是為了批量刪除使用的:


上面畫紅線的部分,即是上面SQL自定義函數的應用。存儲過程代碼:

ALTER PROCEDURE [dbo].[usp_ImageStore_batchDelete]
(
    @MultiPrimaryKeyString NVARCHAR(MAX) 
)
AS
DELETE img FROM [dbo].[ImageStore] AS img 
RIGHT JOIN [dbo].[udf_SplitStringToTable](@MultiPrimaryKeyString,',') AS mpk ON (img.ImageStore_nbr = mpk.Value)
View Code


開發轉至ASP.NET MVC,有Entity寫批量刪除的方法:


 在控制器中,我們創建一個操作,為jQuery使用:

 

Ok,主要的工作還是視圖,我們需要修改html和添加jQuery代碼,不急一樣一樣來。添加一個銨鈕標簽以及Checkbox:



實現jQuery代碼:


運行看看是否達到預期效果?


沒有問題,能正常刪除記錄。不過還是沒有后悔提示,讓用戶確認之后,才正確刪除,添加一行代碼:



再次演示:

 

 
jQuery Button的事件代碼:

 $("#Button1").click(function () {
                var valList = "";
                $('input[name="imgSel"]').each(function () {
                    if (this.checked)
                        valList += ',' + $(this).val();
                });
                valList = valList.length > 0 ? valList.substring(1, valList.length) : "";


                if (valList == "") {
                    alert("Select Delete Records.");
                    return;
                }
                else {
                    if (confirm("All selected records will be delete!") == true) {
                        $.ajax({
                            type: 'POST',
                            url: '/July15/BatchDelete',
                            dataType: 'json',
                            data: JSON.stringify({
                                strPkLists: valList
                            }),
                            contentType: 'application/json; charset=utf-8',
                            success: function (data, textStatus) {
                                alert("Delete成功。");
                                location.reload();
                            },
                            error: function (XMLHttpRequest, textStatus, errorThrown) {
                                alert(errorThrown);
                            }
                        });
                    }
                }
            });
View Code


不管怎樣,我們開發程序,均是為了高效與介面友好。上面批理刪除,我們是把所有選擇的主鍵值串連一起傳入數據庫中,那是為了高效。不必有程序中循環分別傳入數據庫中去。在較高一些版本的數據庫,還有另外一法,也是Insus.NET較常用的方法。就是把所有選擇的主鍵值放在一個DataTable中,然后把這個DataTable傳入數據庫中。

你可以有數據庫自定義一個數據類型,這個類型其實就是DataTable的結構。

 

 再創建一個存儲過程:


在MVC的實體(Entity)中代碼參考下面#59~#78,其中#61,62是定義一個DataTable。#64是把字符串根據 “,” 分割為陣列。#66~69是循環陣列把值存儲DataTable中。



在控制器中,我們稍修改一下操作:


OK了,最后一個實例動畫演示就不上了。跟上面的演示是一樣了。整篇中,也許還寫不夠完整。但是Insus.NET所掌握的,均分享於此,望你有所了解有所收獲......


以下內容於2015-07-07 14:20分添加:
博文發表完之后,才發現還有一個小功能沒有實現,就是在表頂放一個全選的checkbox。沒有問題,現補充上來,讓其更全面:
在html修改,添加checkbox:



寫jQuery代碼,也是相當簡單:

 
此時,這個需要一個動畫演示:


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM