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