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.onload= function () {
var element = document.getElementsByClassName("delete");
for(var i=0;i<element.length;i++)
{
element[i].onclick= function () {
if (!confirm("确定要删除吗"))
return false;
}
}
}
</script>
</head>
<body>
<div>
<a href="/Home/AddUser">添加</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控制器,所以增删改查都得自己添加,包括后天的逻辑得自己写。

MVC学习之简单的CRUD的更多相关文章

  1. Spring MVC 一次简单的 CRUD

    基本环境搭建 1.数据库 和 实体类 的名字相同,实体类 属性名即 数据库 字段名. 2.创建 实体类 对应 dao 类,持久层框架 mybatis 正处于学习中,这里就用原始的 jdbc 操作了. ...

  2. ASP.NET MVC学习---(六)CRUD例子补充

    在之前,我们使用mvc做了一个crud的小例子 整个项目过程应该是能够很容易理解的 通过这个例子我们可以大概的了解mvc的基本使用方法 但是由于篇幅限制(还不如说自己懒不想写那么长...) 没有能够在 ...

  3. Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息

    </pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...

  4. Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息

    Spring MVC 学习笔记9 -- 实现简单的用户管理(4.2)用户登录--显示局部异常信息 第二部分:显示局部异常信息,而不是500错误页 1. 写一个方法,把UserException传进来. ...

  5. Spring MVC 学习笔记8 —— 实现简单的用户管理(4)用户登录

    Spring MVC 学习笔记8 -- 实现简单的用户管理(4)用户登录 增删改查,login 1. login.jsp,写在外面,及跟WEB-INF同一级目录,如:ls Webcontent; &g ...

  6. MVC学习一:MVC简单流程

    MVC学习一:MVC初次接触 1.MVC简单流程 1.1.服务器接收客户端请求后,解析URL(根据 路由表里配置的URL来分析 类名(控制器名)和方法名)根据请求的类名,创建对应的控制器类对象,并调用 ...

  7. ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作

    前言: 本章主要通过一个完整的示例讲解ASP.NET Core MVC+EF Core对MySQL数据库进行简单的CRUD操作,希望能够为刚入门.NET Core的小伙伴们提供一个完整的参考实例.关于 ...

  8. Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)

    很多时候前端都需要调用后台服务实现交互功能,常见的数据交换格式多是JSON或XML,这里主要讲解Spring MVC为前端提供JSON格式的数据并实现与前台交互.RESTful则是一种软件架构风格.设 ...

  9. ASP.NET MVC学习---(八)三个比较常用的方便的功能

    通过之前的了解 现在我们已经可以使用mvc进行一些简单的开发 但是还不够 哪里不够呢? 为什么现在的程序员喜欢用mvc进行开发 不就是因为它爽吗? 之前介绍的那些特点仅仅是mvc框架的一小部分 只是一 ...

随机推荐

  1. Swing开发图形界面有如下优势

    Swing开发图形界面有如下优势 : Swing组件不再依赖于本地平台的GUI,无须采用各种平台的GUI交集,因此Swing提供了大量图形界面组件,远远超出了AWT所提供的图形界面组件集. Swing ...

  2. OpenCV_基于局部自适应阈值的图像二值化

    在图像处理应用中二值化操作是一个很常用的处理方式,例如零器件图片的处理.文本图片和验证码图片中字符的提取.车牌识别中的字符分割,以及视频图像中的运动目标检测中的前景分割,等等. 较为常用的图像二值化方 ...

  3. Javascript 严格模式 strict mode(转)

    一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Javascript在更严格的条件下运行. ...

  4. [ACM] POJ 3349 Snowflake Snow Snowflakes(哈希查找,链式解决冲突)

    Snowflake Snow Snowflakes Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 30512   Accep ...

  5. CCF - 最大矩形

    试题编号: 201312-3 试题名称: 最大的矩形 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n ...

  6. hadoop本地测试命令

    http://www.cnblogs.com/shishanyuan/p/4190403.html if have assign the /etc/profile: hadoop jar /usr/l ...

  7. Javascript定义类(class)的最新方法

    极简主义法 3.1 封装 这种方法不使用this和prototype,代码部署起来非常简单,这大概也是它被叫做"极简主义法"的原因. 首先,它也是用一个对象模拟"类&qu ...

  8. WPF图片模糊的解决之路

    设计稿转为xaml后,设计师开始review UI了,发现图片都模糊了. 这一张很神奇,三个图片都是同一张,中间的那个最清楚,上面的这个左右两边清楚,下面的那个四个边都不清楚. 这一张,右边是原图,左 ...

  9. 打地鼠游戏iOS源代码项目

    打地鼠游戏源代码,游戏是一款多关卡基于cocos2d的iPad打地鼠游戏源代码.这也是一款高质量的打地鼠游戏源代码.能够拥有逐步上升的关卡的设置,大家能够在关卡时设置一些商业化的模式来盈利的,很完美的 ...

  10. POJ 1384 Piggy-Bank(完全背包)

    Description Before ACM can do anything, a budget must be prepared and the necessary financial suppor ...