天天看點

MVC學習之簡單的CRUD

1.一點知識的總結

(1)MVC将展示頁面和背景處理邏輯分離,不像ASPX中展示頁面繼承自背景的cs頁面,MVC展示頁面繼承自ViewPage<dynamic>,最終繼承自Page(使用ASPX模闆引擎可以看到這種繼承關系)

(2)因為沒有了繼承關系,前背景的資訊傳遞不能使用protected的成員變量進行傳遞,MVC使用ViewDate,進行資料的傳遞

        ViewData["UserInfo"]=User;

 (3)  MVC提供了一個ViewData.Model,進行資料的傳遞,可以大大簡化書寫的代碼,提高準确性,友善開發。

    使用ASPX引擎的話,需要将ViewPage<dynamic>改為ViewPage<UserInfo>,然後隻要在背景對Model指派之後,前台就可以點出來,,這就是強類型頁面,同時使用Rasor引擎的話可以直接在添加視圖的時候,同時選中強類型頁面的勾選,然後標明相應的model即可。

(4)對于初次加載頁面和post送出頁面,對于ASPX存在一個IsPostBack屬性,進行判斷,MVC沒有,當然可以使用隐藏域自己手寫一個postback判斷屬性,然而MVC中提供了更加簡單的方式,可以使用相應的特性進行标記。(HttpPost、HttpGet、HttpDelete、HttpPut等)

public ActionResult Index()

{

return View();

}

[HttpPost]

public ActionResult Index(User user)

{

}

(4)  如何确定删除的ID呢,在ASPX中可以使用URL進行傳遞?Id=12,同樣在MVC中也是可以使用這種方式進行傳遞的,然後使用Reques進行接收即可,當然可以在Routeconfig中看到對于MVC的位址還有第三個參數ID,是以可以直接/Home/Index/12,就可以了,然後MVC的強大之處就是已經實作了相應的映射,隻需要在Index(int Id ),名稱必須和路由規則中名稱一緻,但是這種方式隻能傳遞一個參量,想要傳遞多個可以使用?UserName=dd&&UseAge=22.

2.CRUD的簡單實作

(1)查

背景
 public ActionResult Index()
        {
            //擷取資料
            IQueryable<Teacher> teacherList = dbContext.Teacher.Where<Teacher>(t => true);
            StringBuilder sb = new StringBuilder();
            foreach (Teacher teacher in teacherList)
            {
                sb.Append(string.Format("<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td><td><a href='/home/Update/{6}'>修改</a><a href='/Home/Delete/{6}' class='delete'>删除</a></td></tr>", teacher.TeacherId, teacher.LoginId, teacher.LoginPwd, teacher.TeacherName, teacher.Sex, teacher.Birthday, teacher.TeacherId));
            }
            ViewData["teacherInfo"] = sb.ToString();
            return View();
        }

前台
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<%@ Import Namespace="MVCCRUD.Models"  %>
<!DOCTYPE html>

<html>
<head runat="server">
    <meta name="viewport" content="width=device-width" />
    <title>教職員工的清單</title>
    <script>
        window.οnlοad= function () {
            var element = document.getElementsByClassName("delete");
            for(var i=0;i<element.length;i++)
            {
                element[i].οnclick= function () {
                    if (!confirm("确定要删除嗎"))
                        return false;
                }
            }
        }
    </script>
    </head>
<body>
    <div>
        <a href="/Home/AddUser" target="_blank" rel="external nofollow" >添加</a>
        <table>
            <th>ID</th><th>登入ID</th><th>登入密碼</th><th>姓名</th><th>性别</th><th>生日</th><th>操作</th>
             <%=ViewData["teacherInfo"].ToString() %>
        </table>
    </div>
</body>
</html>
對于前台的資料使用的是在背景直接将字元串拼接出來,當然可以直接将從資料中擷取的資料複制給ViewData,然後直接在前台頁面将ViewData轉為IQuerable<Teacher>,,然後在前台foreach周遊顯示即可


           

(2)添加

背景
 public ActionResult AddUser()
        {
            return View();
        }
        [HttpPost]
        public ActionResult AddUser(Teacher teacher)
        {
            //添加資料
            teacher.Birthday = DateTime.Now;
            dbContext.Teacher.Add(teacher);
            int count = dbContext.SaveChanges();
            if (count > 0)
            {
                return RedirectToAction("Index");
            }
            else
            {
                return Content("添加失敗!");
            }

        }

前台
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>AddUser</title>
</head>
<body>
    <div>
        <form action="/Home/AddUser" method="post">
            登入名:<input type="text" name="LoginId"><br>
            登入密碼:<input type="password" name="LoginPwd" /><br>
            姓名:<input type="text" name="TeacherName"><br>
            性别:<input type="text" name="Sex"><br>
            使用者狀态:<input type="text" name="UserStateId"><br>
            <input type="submit" value="添加">
        </form>
    </div>
</body>
</html>
           

 (3)修改

背景
  public ActionResult Update(int id)
        {
            //擷取取資料
            Teacher teacher = dbContext.Teacher.FirstOrDefault(t => t.TeacherId == id);
            ViewData["teacherInfo"] = teacher;
            return View();
        }
        [HttpPost]
        public ActionResult Update(Teacher teacher)
        {
            teacher.Birthday = DateTime.Now;
            dbContext.Entry<Teacher>(teacher
               ).State = EntityState.Modified;//完成映射并且将記憶體資料庫中的資料處理好
            int count = dbContext.SaveChanges();
            if (count > 0)
            {
                return Redirect("/Home/Index");
            }
            else
            {
                return Content("修改失敗");
            }
        }

前台
@{
    Layout = null;
}

    <!DOCTYPE HTML>

    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Update</title>
    </head>
    <body>
        @{ MVCCRUD.Models.Teacher teacher = ViewData["teacherInfo"] as MVCCRUD.Models.Teacher; }
        <div>
            <form action="/Home/Update" method="post">
                <input type="hidden" name="teacherId" value="@teacher.TeacherId">
                登入名:<input type="text" name="LoginId" value="@teacher.LoginId"><br>
                登入密碼:<input type="password" name="LoginPwd" value="@teacher.LoginPwd" /><br>
                姓名:<input type="text" name="TeacherName" value="@teacher.TeacherName"><br>
                性别:<input type="text" name="Sex" value="@teacher.Sex"><br>
                使用者狀态:<input type="text" name="UserStateId" value="@teacher.UserStateId"><br>
                <input type="submit" value="修改">
            </form>
        </div>
    </body>
</html>
           

 (4)删除

背景:
  public ActionResult Delete(int id)
        { 
            Teacher teacher=dbContext.Teacher.Find(id);
            dbContext.Teacher.Remove(teacher);
            int count =dbContext.SaveChanges();
            if (count > 0)
            {
                return Redirect("/Home/Index");
            }
            else 
            {
                return Content("删除失敗");
            }

        }

前台:
Js 代碼寫在了展示頁面
           

 3.結尾之言

以上隻是簡單的實作了CRUD功能,僅僅是一個示範作用,MVC其實已經做好了以上的CRUD操作,也就是在添加控制器的時候,可以選擇添加帶有讀寫操作的控制器,MVC已經将讀寫的前背景程式全部已經寫好了。我選擇的空的MVC控制器,是以增删改查都得自己添加,包括後天的邏輯得自己寫。

轉載于:https://www.cnblogs.com/XZhao/p/6617657.html