首页 > 学院 > 开发设计 > 正文

MVC3学习随记一

2019-11-14 16:44:17
字体:
来源:转载
供稿:网友

最近才接触mvc,也是才接触linq语法,还有EntiyFramework,个人感觉这种开发模式还是挺不错的,随手记点笔记,简单做个增删改查吧

一、实例化上下文ObjectContext:

引用空间那些就跳过了。。

db_testEntities test = new db_testEntities();

二、用linq语法从数据库查询数据:

使用linq语句查询返回的数据类为IQueryable类型:

IQueryable<MvcTest.Models.T_UserInfo> list = from d in test.T_UserInfo select d;

奇怪的是,执行语句时,没有返回数据,使用sql Server PRofiler跟踪,并没有对数据库执行任何操作,网上资料说,是因为EF的延迟加载的缘故,EF具有的延迟加载和预先加载的事件,其利弊端还不是很明确,日后得好好学习,知道原因后,查询数据代码改为:

第一种方法:使用SQO标准查询运算符查找所有数据列List<MvcTest.Models.T_UserInfo> list = test.T_UserInfo.ToList();第二种方法:使用linq语法查询List<MvcTest.Models.T_UserInfo> list = (from d in test.T_UserInfo select d).ToList();

三、linq做个简单的分页查询,方法如下:

 #region 获取分页数据和数据条数        /// <summary>        /// 获取分页数据和数据条数        /// </summary>        /// <param name="pageIndex">当前页</param>        /// <param name="i">数据条数</param>        /// <returns></returns>               public IQueryable<T_UserInfo> GetPageLoad(int pageIndex, out int i)        {            IQueryable<T_UserInfo> list = (from d in test.T_UserInfo orderby d.Id select d).Skip<T_UserInfo>(5 * (pageIndex - 1))
.Take<T_UserInfo>(5); var count = from d in test.T_UserInfo select d; i = count.Count<T_UserInfo>();//记录条数 return list; } #endregion

这里说明下:skip是在分页在前有多少条数据,也就是在当前页数据之前的数据总和,(跳过序列中指定数量的元素,然后返回剩余的元素。),下标是从零开始的

                 Take是指页容量这里分为每页显示5条数据

四、获取分页数据并返回给视图view:

 #region 查找数据列表        /// <summary>        /// 查找数据列表并分页        /// </summary>        /// <returns></returns>        public int pageIndex=1;        public ActionResult Index()        {            string pindex = Request.Params["index"];            int pi = string.IsNullOrEmpty(pindex) ? pageIndex : int.Parse(pindex);            int s=0;            ViewData["DataList"] = GetPageLoad(pi,out s);            int dataCount = s;            int pagecount = dataCount / 5;//数据页数            pagecount =dataCount % 5 != 0 ? pagecount += 1 : pagecount;            ViewBag.pageCount = pagecount;//页数            ViewBag.dataCount = dataCount;//条数            ViewBag.pageindex =pi;//当前页            return View();        }        #endregion

View视图代码如下:

 1 @using MvcTest.Models 2 @{ 3     Layout = null; 4 } 5  6 <!DOCTYPE html> 7  8 <html> 9 <head>10     <title>用户列表</title>11     <style type="text/CSS">12         #tab13         {14             border:1px solid #0094ff;15             width:600px;16             margin:10px auto;17             border-collapse:collapse;18             }19          #tab th,td20             {21                border:1px solid #0094ff;22                 padding:5px;23                 }24     </style>25     <script type="text/javascript">26        function doDel(id)27         {28             if (confirm('你确定要删除吗?')) {29                 window.location = "Dog/del/" + id;30                 31             }32         }33 34         function page(sta, pageIndex, pageCount) {35             switch (sta) {36                 case "index":37                     38                     window.location = "?index=1";39                     break;40                 case "prev":41                     pageIndex = pageIndex > 1 ? parseInt(pageIndex - 1, 10) : pageIndex42                     window.location = "?index=" + pageIndex;43                     break;44                 case "next":45                     pageIndex = pageIndex < pageCount ? parseInt(pageIndex + 1, 10) : pageIndex;46                     window.location = "?index=" + pageIndex;47                     break;48                 case "last":49                     window.location = "?index="+pageCount;50                     break;51                     52             }53         }54 55         function pageSta(pageIndex, sta) { 56         switch(sta){}57         58         }59     </script>60     61 </head>62 <body>63     <div>64         @{ int i = 0;}65     <table id="tab">66     <tr><th>编号</th><th>用户名</th><th>用户类型</th><th>用户性别</th><th>操作&nbsp;&nbsp;<a href="Dog/Add">新增</a></th></tr>67         @foreach (T_UserInfo u in ViewData["DataList"] as IQueryable<T_UserInfo>)68         {69             i += 1;70             <tr align="center">71             <td>@i</td>72             <td>@u.UserName</td><td>@u.Name</td><td>@u.Gender</td>73             <td><a href="Dog/Edit/@u.Id">修改</a>&nbsp;&nbsp;74             <a href="Javascript:doDel(@u.Id)">删除</a></td>75             </tr>76         }77         <tr><td colspan="5" align="center">78         共有 @ViewBag.dataCount 条数据&nbsp;&nbsp;当前 @ViewBag.pageIndex/ @ViewBag.pageCount 页79         <a href="javascript:;" onclick="page('index',@ViewBag.pageIndex,@ViewBag.pageCount)">首页</a>&nbsp;&nbsp;80         <a href="javascript:;" onclick="page('prev',@ViewBag.pageIndex,@ViewBag.pageCount)">上一页</a>&nbsp;&nbsp;81         <a href="javascript:;" onclick="page('next',@ViewBag.pageIndex,@ViewBag.pageCount)">下一页</a>&nbsp;&nbsp;82         <a href="javascript:;" onclick="page('last',@ViewBag.pageIndex,@ViewBag.pageCount)">尾页</a>&nbsp;&nbsp;83         </td></tr>84         </table>85             86     </div>87 </body>88 </html>
View Code

本页面包括增删改操作,效果图如下:

五、添加新数据:

#region 添加数据        /// <summary>        /// 添加数据        /// </summary>        /// <param name="u"></param>        /// <returns></returns>        [HttpPost]        public ActionResult Add(T_UserInfo u)        {   
//方法一:
//T_UserInfo t = new T_UserInfo //{ // Name = u.Name, // UserName = u.UserName, // Gender = u.Gender, // PassWord = "123456" //}; ////获取提交的数据放到实体中 //test.T_UserInfo.Attach(t); ////修改实体的状态为添加 //test.ObjectStateManager.ChangeObjectState(t, System.Data.EntityState.Added); ////保存到数据库 //test.SaveChanges();
//方法二:
ObjectSet<T_UserInfo> user = test.CreateObjectSet<T_UserInfo>(); var newUser= user.CreateObject(); newUser.Name = u.Name; newUser.UserName = u.UserName; newUser.Gender = u.Gender; newUser.PassWord ="123456"; user.AddObject(newUser); test.SaveChanges(); return RedirectToAction("Index", "Dog"); } #endregion

这里提供有两种方法,其实获取表单传过来的数据,可以有好几种方法,这里是传入一个实体

前台代码如下:

 1 @{ 2     Layout = null; 3 } 4 <!DOCTYPE html> 5 <html> 6 <head> 7     <script src="../../Scripts/jquery.validate.min.js" type="text/javascript"></script> 8     <script src="../../Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script> 9     <title>添加用户</title>10     <style type="text/css">11         #tab12         {13             border:1px solid #0094ff;14             width:600px;15             margin:10px auto;16             border-collapse:collapse;17             }18          #tab th,td19             {20                border:1px solid #0094ff;21                 padding:5px;22                 }23     </style>24 </head>25 <body>26 @*@using(Html.BeginForm("Add","Dog",FormMethod.Post)){*@27 <form id="from1" action="/Dog/Add" method="post">28     <table id="tab">29     <tr><td colspan="3" align="center">添加用户</td></tr>30     <tr><td width="">用户名</td><td><input name="username" /></td><td></td></tr>31     <tr><td>用户类型</td><td><select name="name">32     <option value="管理员">管理员</option>33     <option value="用户">用户</option>34     <option value="普通会员">普通会员</option>35     </select></td><td></td></tr>36     <tr><td>性别</td><td>37     <select name="gender">38     <option value="">男</option>39     <option value="">女</option>40     </select>41     </td><td></td></tr>42     <tr><td colspan="3"><input type="submit" value="添加" />&nbsp;&nbsp;<input type="button" value="取消" /></td></tr>43     </table>44     </form>45    @*}*@46 </body>47 </html>
View Code

六、删除操作:

 1  #region 删除操作 2         /// <summary> 3         /// 删除操作 4         /// </summary> 5         /// <param name="id"></param> 6         /// <returns></returns> 7         public ActionResult Del(int id) 8         { 9             try10             {11                 //方法一:12                 //创建要删除的对象13                 //T_UserInfo u = new T_UserInfo();14                 //u.Id = id;15                 //将对象存放到EF管理容器中16                 //test.T_UserInfo.Attach(u);17                 //将对像的状态改为删除状态18                 //test.T_UserInfo.DeleteObject(u);19                 //更新到数据库 20                // test.SaveChanges();21                 //方法二:22                 ObjectSet<T_UserInfo> t = test.CreateObjectSet<T_UserInfo>();23                 T_UserInfo tu = t.Where("it.Id=@id", new ObjectParameter("id",id)).First();24                 t.DeleteObject(tu);25                 test.SaveChanges();26                 return RedirectToAction("Index", "Dog");27             }28             catch (Exception ex)29             {30 31                 return Content("删除出错" + ex.Message);32             }33         } 34         #endregion
View Code

同样使用两种方法都可行。

七、修改操作:

首先要显示要修改的数据:

 1 #region 显示修改数据 2         public ActionResult Edit(int id) 3         { 4             //根据Id查找要修改的数据 5             T_UserInfo user = (from u in test.T_UserInfo where u.Id == id select u).FirstOrDefault(); 6             //将查询到的数据返回给view viewBag,ViewData 7             //*可以再加载视图时将数据传给视图上名为model的属性 8             //下拉列表框 9             List<SelectListItem> list = new List<SelectListItem>() {10                 new SelectListItem { Value = "管理员", Text = "管理员"},11                 new SelectListItem { Value = "普通会员", Text = "普通会员"},12                 new SelectListItem { Value = "用户", Text = "用户"}13             };14             //SelectListItem li = new SelectListItem { Value = "管理员", Text = "管理员"};15             ViewBag.select = list;16             return View(user);17         } 18     #endregion
View Code

接下来是修改:

 1  #region 修改操作 2         /// <summary> 3         /// 修改操作 4         /// </summary> 5         /// <param name="u">实体类</param> 6         /// <returns></returns> 7         [HttpPost] 8         public ActionResult Edit(T_UserInfo u) 9         {10             try11             {12                 //test.T_UserInfo.Attach(u);//将实体附加到实体上下文13                 //手动修改实体的状态14                 //修改整个实体属性15                 //test.ObjectStateManager.ChangeObjectState(u,System.Data.EntityState.Modified);16                 //保存回数据库17                 //***********************************************************************//18                 //只修改相应属性值19                 T_UserInfo t = test.T_UserInfo.FirstOrDefault(a=>a.Id==u.Id);//找到实体20                 if (t !=null)21                 {22                     t.Name = u.Name;//修改用户类型23                     t.UserName = u.UserName;//修改用户名称24                     t.Gender = u.Gender;//修改性别25                     test.SaveChanges();26                 }27                 return RedirectToAction("Index", "Dog");28             }29             catch (Exception ex)30             {31 32                 return Content("修改失败" + ex.Message);33             }34         } 35         #endregion
View Code

效果如下:

 本人新菜鸟,如有不对的地方,欢迎大侠们指正,不喜勿喷。。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表