MVC+EF+EasyUI实现CRUD

在写代码的时候,一直搞不懂MVC的运行过程,通过这次摸索,好像清晰了不少:


阶段


详细


接收应用程序的第一次请求


在Global.asax文件中, Route对象 被添加到RouteTable对象.


执行路由选择


UrlRoutingModule 模块使用第一个在RouteTable 集合中匹配的Route 对象来创建RouteData对象, 然后它将使用这个RouteData对象来创建RequestContext (IHttpContext)对象.


创建MVC request handler


MvcRouteHandler 创建MvcHandler类的一个实例,并且将它传递给RequestContext实例.


创建controller


MvcHandler对象使用RequestContext实例来确认IControllerFactory 对象(DefaultControllerFactory类的一个实例) ,以用来创建conteoller实例。


执行controller


MvcHandler 实例调用controller的执行method.


调用action


大部分controllers 继承自Controller基础类. 与controller相关联的ControllerActionInvoker 对象决定这个controller类的哪个方法将被调用 , 然后再调用那个方法.


执行result


大部分controllers 继承自Controller基础类. 与controller相关联的ControllerActionInvoker 对象决定这个controller类的哪个方法将被调用 , 然后再调用那个方法.

总而言之,向Web程序发生请求的时候,通过路由中的指定控制器(Controller)和视图(View)切入访问,返回执行结果。

MVC中的V相当于以前ASP.NET中的aspx页面,C相当于一般处理程序或.aspx.cs文件。

这是我个人理解,如果有误,希望提醒。

下面附上代码:

首先是前台的View代码

  1 @model Model.Users
  2
  3 @{
  4     Layout = null;
  5 }
  6
  7 <!DOCTYPE html>
  8
  9 <html>
 10 <head>
 11     <meta name="viewport" content="width=device-width" />
 12     <title>List</title>
 13     <link href="~/CSS/themes/default/easyui.css" rel="stylesheet" />
 14     <link href="~/CSS/themes/icon.css" rel="stylesheet" />
 15     <script src="~/Scripts/jquery-1.8.2.min.js"></script>
 16     <script src="~/Scripts/jquery.easyui.min.js"></script>
 17     <script src="~/Scripts/easyui-lang-zh_CN.js"></script>
 18     <script type="text/javascript">
 19         $(function () {
 20             $(‘#test‘).datagrid({
 21                 url: ‘/Users/List‘,
 22                 method:‘post‘,
 23                 title: ‘用户列表‘,
 24                 width: 700,
 25                 height: 400,
 26                 fitColumns: true,
 27                 idField: ‘Id‘,
 28                 loadMsg: ‘正在加载用户的信息...‘,
 29                 pagination: true,
 30                 singleSelect: false,
 31                 pageNumber:1,
 32                 pageList: [10, 20, 30],
 33                 queryParams: {},
 34                 columns: [[
 35                         { field: ‘ck‘, checkbox: true, align: ‘left‘, width: 50 },
 36                         { field: ‘Id‘, title: ‘主键‘, width: 80 },
 37                         { field: ‘LoginId‘, title: ‘用户名‘, width: 120 },
 38                         { field: ‘Name‘, title: ‘真实姓名‘, width: 120 },
 39                         { field: ‘Phone‘, title: ‘电话‘, width: 120 },
 40         ]],
 41                 toolbar:[{
 42                     id:‘btnadd‘,
 43                     text:‘Add‘,
 44                     iconCls:‘icon-add‘,
 45                     handler:function(){
 46                         window.location.href = "/Users/Create";
 47                     }
 48                 },‘-‘,{
 49                     id:‘btnDelete‘,
 50                     text:‘Delete‘,
 51                     iconCls:‘icon-cut‘,
 52                     handler: function () {
 53                         var rows = $(‘#test‘).datagrid("getSelections");
 54                         if (rows.length != 1) {
 55                             $.messager.alert("消息提醒", "会删除吗?", "warning");
 56                             return;
 57                         }
 58                         var selectId=rows[0].Id;
 59                         window.location.href = "/Users/Delete?Id="+selectId;
 60                     }
 61                 },‘-‘,{
 62                     id:‘btnEdit‘,
 63                     text:‘Edit‘,
 64                     iconCls:‘icon-edit‘,
 65                     handler: function () {
 66                         var rows = $(‘#test‘).datagrid("getSelections");
 67                         if (rows.length != 1) {
 68                             $.messager.alert("消息提醒", "会修改吗?", "warning");
 69                             return;
 70                         }
 71                         var selectId = rows[0].Id;
 72                         window.location.href = "/Users/Edit?Id=" + selectId;
 73                     }
 74                 }, ‘-‘, {
 75                     id: ‘btnDetail‘,
 76                     text: ‘Detail‘,
 77                     iconCls: ‘icon-search‘,
 78                     handler: function () {
 79                         var rows = $(‘#test‘).datagrid("getSelections");
 80                         if (rows.length != 1) {
 81                             $.messager.alert("消息提醒", "能只选一行吗?", "warning");
 82                             return;
 83                         }
 84                         var selectId = rows[0].Id;
 85                         window.location.href = "/Users/Detail?Id=" + selectId;
 86                     }
 87                 }
 88                 ],
 89                 onHeaderContextMenu: function (e, field) {
 90
 91                 }
 92             });
 93
 94         })
 95     </script>
 96 </head>
 97 <body>
 98     <table id="test"></table>
 99 </body>
100 </html>

后台控制器Control代码

 1 public class UsersController : Controller
 2     {
 3         //
 4         // GET: /Users/
 5         UsersBll usersBll = new UsersBll();
 6         public ActionResult Index()
 7         {
 8             //int total = 0;
 9             //ViewData["Users"] = usersBll.GetPageModel(u => u.Id != 0, u => u.Id, pagesize, pageindex, isDes, out total);
10             //ViewData["pageStr"] = Common.LaomaPager.ShowPageNavigate(pagesize, pageindex, total);
11
12             return View("List");
13         }
14         [HttpPost]
15         public JsonResult List(int pagesize = 10, int pageindex = 1, bool isDes = false)
16         {
17             int total = 0;
18             pagesize = int.Parse(Request["rows"]??"10");
19             pageindex = int.Parse(Request["page"]??"1");
20
21             List<Users> list = usersBll.GetPageModel(u => u.Id != 0, u => u.Id, pagesize, pageindex, isDes, out total);
22             //ViewData["pageStr"] = Common.LaomaPager.ShowPageNavigate(pagesize, pageindex, total);
23             Hashtable ht = new Hashtable();
24             ht["total"] = total;
25             ht["rows"] = list;
26             return Json(ht,JsonRequestBehavior.AllowGet);
27         }
28         public ActionResult Create()
29         {
30             return View();
31         }
32         [HttpPost]
33         public ActionResult Create(Users user)
34         {
35             if (ModelState.IsValid)
36             {
37                 user.LoginPwd = Common.ComHelper.StringToMd5(user.LoginPwd);
38                 usersBll.AddUser(user);
39                 return RedirectToAction("Index");
40             }
41             return View(user);
42         }
43
44         public ActionResult Edit(int id = 0)
45         {
46             Users user = usersBll.GetUserById(id);
47             if (user == null)
48             {
49                 return HttpNotFound();
50             }
51             return View(user);
52         }
53
54         [HttpPost]
55         public ActionResult Edit(Users user)
56         {
57             if (ModelState.IsValid)
58             {
59                 usersBll.Edit(user);
60                 return RedirectToAction("Index");
61             }
62             return View(user);
63         }
64
65         public ActionResult Detail(int id = 0)
66         {
67             Users user = usersBll.GetUserById(id);
68             if (user == null)
69             {
70                 return HttpNotFound();
71             }
72             return View(user);
73         }
74
75         public ActionResult Delete(int id = 0)
76         {
77             Users user = usersBll.GetUserById(id);
78             if (user == null)
79             {
80                 return HttpNotFound();
81             }
82             return View(user);
83         }
84         [HttpPost, ActionName("Delete")]
85         public ActionResult DeleteConfirmed(int id)
86         {
87             usersBll.Delete(id);
88             return RedirectToAction("Index");
89         }
90     }

执行效果:

时间: 2024-10-03 07:03:37

MVC+EF+EasyUI实现CRUD的相关文章

ASP.NET MVC +EF+Easyui datagrid

先看下效果图: 前台View页面跟之前的ASP.NET WebForm 差不多,只需要把post提交请求的路径改成/控制器/动作,绑定的参数改动下,开看源码: <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> <!DOCTYPE html> <html> <head runat="server">

【第十一篇】这一篇来说说MVC+EF+easyui datagrid的查询功能

老规矩 直接上代码 1 <form class="form-horizontal"> 2 <div class="box-body"> 3 <div class="row"> 4 <div class="form-group col-xs-1" style="width: 390px;"> 5 <label for="CersNo"

转 -- MVC+EF easyui dataGrid 动态加载分页表格

首先上javascript的代码 <script type="text/javascript"> $(function () { LoadGrid(); }) //加载表格!!! function LoadGrid() { $('#roleGrid').datagrid({ width: 900, striped: true, //交替条纹 fitColumns: true, //防止水平滚动 fit: true,//自动补全 iconCls: "icon-sav

.NET mvc+EF+EasyUI增删查改

链接:https://pan.baidu.com/s/1ZGFieFO-D7_hvtFy5xro5w 提取码:t1yw 复制这段内容后打开百度网盘手机App,操作更方便哦 原文地址:https://www.cnblogs.com/fzqm-lwz/p/10548865.html

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程 前言:前面几篇博客我们基本已经介绍完了搭建整个项目和数据库访问层以及一些业务逻辑层的实现,当然了,我们的数据库访问层这样还是可以在进行封装的,但是我到这里就行了吧,项目也不大,不需要那么麻烦的,那么我们今天开始介绍我们需要介绍的内容,那就是我

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(3)-面向接口的编程

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(3)-面向接口的编程 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)  (1)框架搭建    (2):数据库访问层的设计Demo 前言:这篇博客在数据访问层的基础上面我们继续学习对这个Demo的开发,希望大家都好好理解一下这个Demo的架构,到最后我实现权限的时候我就简单的说一下搭建过程就OK了,因为这个Demo的思想就是按照权限的设计方式去设计的,下面我们开始介绍面向接口的编程思想,如果感觉好的话可以

ASP.NET MVC+EF框架+EasyUI实现权限管理系列

http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也要感谢大家了,因这个 项目我已经上传了,得到了很多网友的评价,也有好多人发邮件给我说这个框架容易出现问题,不能访问,这也是支持我写这个系列的动力,我将这个项目写成一个 系列

ASP.NET MVC+EF框架+EasyUI实现权限管理

4.为什么使用MVC而不是用WebForm呢? (1)为什么使用MVC而不是用WebForm呢?这个是我临时想的,因为我就是想说明一下WebForm和MVC的优缺点,来可以使大家能够更好地理解 MVC和WebForm,而不像某些人说MVC会替代WebForm,我个人认为这个可能性很小,因为各有各的好处,看在哪里使用吧,下面我就简单介绍下 WebForm和MVC的优缺点. (2)WebForm介绍 1)优点 1):支持事件模型,取决于微软提供了丰富的服务器端组建,WebForm可以快速的搭建Web

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(5)-前台JqueryEasyUI前台实现

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(5)-前台JqueryEasyUI前台实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装 前言:今天经理买了一个诺基亚的Windows Phone 8系统,特感兴趣,所以在哪里看了很长时间,这篇文章就写的有点迟, 从这个Demo开始到现在我已经写了4篇博客了,终于可以看到页面的东