1. 程式人生 > >【MVC】.NET實踐(三)—對資料庫的資料進行刪除與修改

【MVC】.NET實踐(三)—對資料庫的資料進行刪除與修改

在主介面新增修改和刪除的超連結(Index.cshtml)

<table id="tbList">
        <tr>
            <th>id</th>
            <th>姓名</th>
            <th>狀態</th>
            <th>操作</th>
        </tr>

        @*@Html.Raw(ViewBag.HtmlStr)*@
        @foreach (BlogUser a in ViewData["DataList"] as List<BlogUser>)
        {
            <tr>
                <td>@a.Id</td>
                <td>@a.Name</td>
                <td>@a.State</td>
                <td>

                    <a href="/home/modify/@a.Id">修改</a>
                    <a href="javascript:del(@a.Id)">刪除</a>
                </td>
            </tr>
            
        }
    </table>

一、資料的刪除

HomeController

HomeController中新增一個Delete方法

public ActionResult Delete(int id)
{
            try
            {
                //1.建立要刪除的物件
                BlogUser user = new BlogUser() { Id = id };
                //2.將物件新增到EF管理容器
                db.BlogUser.Attach(user);
                //3.將物件包裝類的狀態 標誌位刪除狀態
                db.BlogUser.Remove(user);
                //4.跟新到資料庫
                db.SaveChanges();
                return RedirectToAction("Index", "Home");
            }
            catch (Exception ex)
            {

                return Content("刪除失敗"+ex.Message);
            }
            
 }

Index.cshtml

在主介面Index.cshtml中新增js程式碼,轉向home下的delete方法,為了友好一些,確認是否刪除

<script type="text/javascript">
        function del(id) {
            if (confirm("您確定要刪除嗎?")) {
                window.location = "/home/delete/" + id;
            }
        }
    </script>

二、資料的修改

HomeController.cs

(1)顯示要修改的資料

[HttpGet]
public ActionResult Modify(int id)
 {
            //1.根據id查詢資料庫,返回的集合中 拿到第一個實體物件
            BlogUser user = (from a in db.BlogUser where a.Id == id select a).FirstOrDefault();
            //使用View的建構函式,將資料傳遞給檢視上的名為Model的屬性
            return View(user);
 }

(2)執行修改

[HttpPost]
public ActionResult Modify(BlogUser blogUser)
{
            try
            {
                //db.Configuration.ValidateOnSaveEnabled = false;
                //1.將實體物件加入EF物件容器中,並獲取偽包裝類物件
                DbEntityEntry<BlogUser> entry = db.Entry<BlogUser>(blogUser);
                //2.將包裝類物件的狀態設定為unchanged
                entry.State = System.Data.Entity.EntityState.Unchanged;
                //3.設定 被改變的屬性
                entry.Property(a => a.Name).IsModified = true;
                entry.Property(a => a.State).IsModified = true;
                //4.提交到資料庫
                db.SaveChanges();
                //5.更新成功,則命令瀏覽器重定向到Home/Index 方法
                return RedirectToAction("Index", "Home");


            }
            catch (Exception ex)
            {

                return Content("修改失敗" + ex.Message);
            }
 }

由於方法名一樣,所以在方法前面用[HttpPost]和[HttpGet]來區分

Modify.cshtml

需在最上方引用空間:@model MVC練習.Models.BlogUser

@using (Html.BeginForm("Modify", "Home", FormMethod.Post))
    {
        <table id="tbList">
            <tr>
                <td colspan="2">修改 @Html.HiddenFor(a=>a.Id)</td>
            </tr>
            <tr>
                <td>姓名:</td>
                <td>@Html.TextBoxFor(a => a.Name)</td>
            </tr>
            <tr>
                <td>狀態:</td>
                <td>@Html.TextBoxFor(a => a.State)</td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="確認修改" />@Html.ActionLink("返回", "Index", "Home")</td>

            </tr>
        </table>
    }

佈局程式碼

<style type="text/css">
        #tbList {
            border: 1px solid #0094ff;
            width: 400px;
            margin: 10px auto;
            border-collapse: collapse;
        }

            #tbList th, td {
                border: 1px solid #0094ff;
                padding: 10px;
            }
    </style>

結果

在這裡插入圖片描述 在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述