最近去瞭解了一下 asp.net mvc ,就講一下“刪除”吧。
在顯示資料列表的頁面做刪除功能,首先http在web中支援get和post請求兩種,
如果想在同一頁面顯示資料並且做刪除操作可以通過ajax調用來支援更多的請求方式(put,delete,head等)。
首先是顯示資料列表:
Controller代碼:Code
public ActionResult Index(int? pageIndex)
{
PageList<Movie> list = new PageList<Movie>();
IQueryable<Movie> query = from m in movie.Movie select m;
int pageSize = 10;
int currentPage = pageIndex ?? 1;
int count = 0;
count = query.Count();
list.RowCount = count;
list.PageSize = pageSize;
currentPage = currentPage < 1 ? 1 : currentPage > list.TotalPages ? list.TotalPages : currentPage;
list.CurrentPage = currentPage;
if (count < 1)
{
list.List = new List<Movie>();
}
else
{
list.List = query.Skip<Movie>((currentPage - 1) * pageSize).Take(pageSize);
}
return View(list);
}
說明:PageList<>類是自訂的一個分頁類。
顯示資料:Code
<table id="data">
<tr>
<th>
Id
</th>
<th>
MovieName
</th>
<th>
CategoryName
</th>
<th>Details</th>
<th>Update</th>
<th>Delete</th>
</tr>
<% foreach (var item in (Model as Common.PageList.PageList<MvcDemo.Models.Movie>).List) { %>
<tr>
<td>
<%= Html.Encode(item.Id) %>
</td>
<td>
<%= Html.Encode(item.MovieName) %>
</td>
<td>
<%= Html.Encode(item.CategoryName) %>
</td>
<td>
<%= Html.ActionLink("詳情","Details",new{id = item.Id}) %>
</td>
<td>
<%= Html.ActionLink("更新", "Edit", new {id=item.Id})%>
</td>
<td><a href="javascript:void(0);" onclick="del(this,<%= item.Id %>);">刪除</a></td>
</tr>
<% } %>
</table>
從上可以看到刪除用到了del方法。代碼如下:Code
function del(obj,mId)
{
if (confirm("確定刪除?"))
{
$.ajax(
{
url: "/Movie/Delete/" + mId,
type: "DELETE",
success: function()
{
$(obj.parentNode.parentNode.parentNode.rows[obj.parentNode.parentNode.rowIndex]).remove();
alert("刪除成功!");
//window.location.reload();
},
error: function(XMLHttpRequest, textStatus, errorThrown)
{
alert("刪除失敗!\n資訊:" + errorThrown + "," + textStatus + "\n");
}
}
);
}
}
在此引用了jquery的ajax功能,在刪除的時候請求的方法是DELETE,由上面的type:"DELETE"指定。
伺服器端的刪除代碼就如下,都比較簡單:Code
[AcceptVerbs(HttpVerbs.Delete)]
public void Delete(int id)
{
try
{
Movie mov = (from m in movie.Movie where m.Id == id select m).First();
movie.Movie.DeleteOnSubmit(mov);
movie.SubmitChanges();
}
catch
{ }
}