iT邦幫忙

DAY 25
5

Kuick Hands on Labs系列 第 25

Kuick Hands on Labs -- 25. 刪除資料

補上刪除,就完成了 CRUD 所有的功能。為了能返回特定的列表分頁,列表分頁通常用 Get 傳遞參數,而為了避免不慎點選連結而誤刪資料,資料刪除通常用 Post 傳遞參數。
在前幾篇「Kuick Hands on Labs -- 17. 列表與分頁」裡提及,列表的 HTML 裡額外加上幾個自定義的 attribute,包含 <table> 加上 EntityName 屬性,<tr> 加上 KeyValue 屬性,<td> 加上 ColumnName 屬性,目前的刪除資料功能裡就使用到這些自定義資料。

1. 列表資料增加刪除功能連結
刪除功能連結僅標註 remove 的 CSS:

<a class=\"remove\" href=\"#\">刪除</a>

列表頁建立傳遞刪除參數用的表單 removeForm:

<form id="removeForm" action="remove.aspx" method="post">
	<input type="hidden" name="EntityName" id="removeEntityName" />
	<input type="hidden" name="KeyValue" id="removeKeyValue" />
</form>

2. 點選連結觸發JavaScript處理
JavaScript 讀取所點選的刪除連結裡,往上層找直到找到第一個 <tr> 與 <table>,分別取出自定義屬性值 KeyValue 與 EntityName,經過操作者確認後 Post 刪除表單資料。

function getCloset(x, tag) {
	var tags = x.parentsUntil(tag);
	var tag = tags.length == 0
		? x.parent()
		: $(tags[tags.length - 1]).parent();
	return tag;
}

$(function () {
	// remove
	$('.remove').bind(CONST.ClickEventName, function () {
		var x = $(this);
		var keyValue = getCloset(x, 'tr').attr('KeyValue');
		var entityName = getCloset(x, 'table').attr('EntityName');
		if (confirm("確定刪除 " + entityName + " 資料 " + keyValue)) {
			$('#removeEntityName').val(entityName);
			$('#removeKeyValue').val(keyValue);
			$('#removeForm').submit();
		}
	});
});

3. 刪除功能頁
刪除頁有 3 個參數,EntityName 與 KeyValue 是必要參數,ReturnUrl 為選擇性參數,刪除資料的作法如下:

// EntityName
if(EntityName.IsNullOrEmpty()) {
	Response.Redirect("~/", true);
}
 
// ReturnUrl
ReturnUrl = ReturnUrl.IsNullOrEmpty()
	? "~/entity/?EntityName=" + EntityName
	: ReturnUrl;
 
// KeyValue
if(KeyValue.IsNullOrEmpty()) {
	Response.Redirect(ReturnUrl, true);
}
 
// Original
IEntity original = Entity.Get(EntityName, KeyValue);
if(null == original) {
	Alert("沒有這筆資料");
	JsRedirect(ResolveUrl(ReturnUrl));
}
 
// remove
DataResult result = original.Remove();
if(result.Success) {
	Response.Redirect(ReturnUrl, true);
} else {
	Alert(result.Message);
	JsRedirect(ResolveUrl(ReturnUrl));
}

這裡操作刪除時,先選取該筆資料判斷是否存在再刪除,也可以直接使用主鍵刪除再判斷受影響的筆數是否為 1。

// 取出 Entity 規格定義
IEntity schema = EntityCache.Get(EntityName);
if(null == schema) {
	Response.Redirect("~/", true);
};

// 不取資料,直接執行刪除指令
DataResult result = Entity
	.Sql(EntityName)
	.Where(schema.KeyName, KeyValue)
	.Remove();

// 從回傳的結果物件判斷是否成功,並且加上判斷影響筆數條件
if(result.Success && result.AffectedCount == 1) {
	Response.Redirect(ReturnUrl, true);
} else {
	Alert(result.Message);
	JsRedirect(ResolveUrl(ReturnUrl));
}

上一篇
Kuick Hands on Labs -- 24. 修改表單
下一篇
Kuick Hands on Labs -- 26. 資料統計頁
系列文
Kuick Hands on Labs30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0

我要留言

立即登入留言