MVC3学习随记一-程序员宅基地

技术标签: ViewUI  测试  数据库  javascript  

最近才接触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         #tab
13         {
14             border:1px solid #0094ff;
15             width:600px;
16             margin:10px auto;
17             border-collapse:collapse;
18             }
19          #tab th,td
20             {
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) : pageIndex
42                     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:;" οnclick="page('index',@ViewBag.pageIndex,@ViewBag.pageCount)">首页</a>&nbsp;&nbsp;
80         <a href="javascript:;" οnclick="page('prev',@ViewBag.pageIndex,@ViewBag.pageCount)">上一页</a>&nbsp;&nbsp;
81         <a href="javascript:;" οnclick="page('next',@ViewBag.pageIndex,@ViewBag.pageCount)">下一页</a>&nbsp;&nbsp;
82         <a href="javascript:;" οnclick="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         #tab
12         {
13             border:1px solid #0094ff;
14             width:600px;
15             margin:10px auto;
16             border-collapse:collapse;
17             }
18          #tab th,td
19             {
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             try
10             {
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             try
11             {
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

效果如下:

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

转载于:https://www.cnblogs.com/Agan2213/p/3657119.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/aagop44204/article/details/101884977

智能推荐

kvm虚拟化学习笔记(十七)之KVM到KVM之v2v迁移-程序员宅基地

文章浏览阅读80次。原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。否则将追究法律责任。http://koumm.blog.51cto.com/703525/1304271KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安..._virt-v2v -i vmx -it ssh -ip passwordfile

消息队列MQ的特点及API_mq与api接口的区别-程序员宅基地

文章浏览阅读4.1k次。消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。消息队列的特点:异步 --- 消息队列本身是异步的,它允许接收者在消息发送很长时间后再取回消息,这和大多数通信协议是不同的。 解耦 --- 消息队列减少了..._mq与api接口的区别

王者荣耀服务器维护多久12.4,王者荣耀12月4日维护新活动介绍 王者荣耀维护到几点...-程序员宅基地

文章浏览阅读119次。王者荣耀今天维护到几点?王者荣耀12月4号要维护多久?王者荣耀维护到几点2018?应该有不少玩家在早上都发现了王者荣耀处于维护状态。那么具体的时间是怎么样的呢?下面就随琵琶网小编来了解一下!王者荣耀维护到几点?亲爱的召唤师:我们计划在2018年12月4日7:30-9:00对IOS手Q区、安卓微信区和IOS微信区进行不停机更新。更新结束后,登录即可领取钻石*120+铭文碎片*120!【更新时间】12...

Cisco AP-Mobility Express基础-程序员宅基地

文章浏览阅读647次。Part I 介绍1.1基本概况Cisco Mobility Express这个名词出现在Cisco “8”系列的AP上,例如现在的AP1852,AP2802,AP3802等都是Mobility Express AP,该类AP也有“胖/瘦”之分,所谓的胖AP,携带的是ME的镜像,而瘦AP,和其他的AP类似,携带的是Lightweight AP的镜像。这类AP也被叫做COS AP(...

html网页布局论文,DIV+CSS在网页布局制作中的应用-程序员宅基地

文章浏览阅读945次。网页设计与制作论文第三篇:DIV+CSS在网页布局制作中的应用摘要:布局对网页的作用类似于设计图对地产开发商的作用,制作商务网页的首要内容是对网页进行布局。常见的布局方式有:表格布局、框架布局、层布局,鉴于以上布局方式均存在一定的缺陷逐渐退出历史潮流。目前流行的布局方式是DIV+CSS来制作页面,DIV主要解决网页中的元素(如文字、图片、表格、音视频等)放置在网页显示位置的问题,而CSS主要解决网..._html和css项目论文

敏捷开发步骤简述_商业价值和工作量 优先级-程序员宅基地

文章浏览阅读1.6w次,点赞2次,收藏25次。1.用户需求分析转化为产品BACKLOG这个部分的内容由PM具体负责,主要的工作内容如下:用户调研、需求分析,确定产品迭代功能,出具产品BACKLOG。决定产品的发布日期与发布内容,给迭代计划预设目标。根据RIO(商业价值/工作量)排序优先级,考虑必要风险。 优先级排序:排序的目的,是弄清楚哪些需求最重要因此可能在最近的一两次迭代中进行开发。参与排序的条目一般足够接近半年的开发工作..._商业价值和工作量 优先级

随便推点

基于YOLOv7算法的高精度实时安全背心目标检测识别系统(PyTorch+Pyside6+YOLOv7)-程序员宅基地

文章浏览阅读981次,点赞19次,收藏24次。基于YOLOv7算法的高精度实时安全背心目标检测系统可用于日常生活中检测与定位安全背心,此系统可完成对输入图片、视频、文件夹以及摄像头方式的目标检测与识别,同时本系统还支持检测结果可视化与导出。本系统采用YOLOv7目标检测算法来训练数据集,使用Pysdie6框架来搭建桌面页面系统,支持PT、ONNX等模型权重作为系统的预测模型加载。本系统实现的功能包括:模型权重的选择与初始化;检测置信度与后处理IOU阈值的调节;图像的导入、检测、检测结果的可视化与目标统计;视频的导入、检测、检测结果的可视化与目标统计;文

MFC与SDK_检查mfc用到windows sdk-程序员宅基地

文章浏览阅读317次。MFC即微软基础类(Microsoft Foundation Classes),同VCL类似,是一种Application Framework,随微软Visual C++ 开发工具发布。该类库提供一组通用的可重用的类库供开发人员使用。大部分类均从CObject 直接或间接派生,只有少部分类例外。MFC 应用程序的总体结构通常由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。MFC 提供了MFC AppWizard 自动生成框架。 MFC不只是一_检查mfc用到windows sdk

构建能够使用 CPU 运行的 MetaAI LLaMA2 中文大模型_ggml和langchain在cpu上运行量化的llama2-程序员宅基地

文章浏览阅读1.7k次。本篇文章聊聊如何使用 GGML 机器学习张量库,构建让我们能够使用 CPU 来运行 Meta 新推出的 LLaMA2 大模型。_ggml和langchain在cpu上运行量化的llama2

学生如何提高专业英文阅读能力 精选-程序员宅基地

文章浏览阅读428次。【 序:此文针对本科生和一、二年级的博士、硕士生,对高年级的博士生和博士后也应该有参考价值。该文的一些背景可以参考我此前关于提高英文写作能力的博文:http://www.sciencenet.cn/m/user_content.aspx?id=349932】 从小到大,我感性思维多一些,不善于读书。85至89年在清华生物系读本科期间,从未读过任何一种英文专业期刊。我受到的与英文阅读_学生如何提高专业英文阅读能力

威胁快报|首爆,新披露Jenkins RCE漏洞成ImposterMiner挖矿***新“跳板”-程序员宅基地

文章浏览阅读160次。简介阿里云安全于近日捕获到一起使用Jenkins RCE漏洞进行***的挖矿事件。除挖矿外,***者还曾植入具有C&C功能的tsunami***,也预留了反弹shell的功能,给用户带来极大安全隐患。由于***者直接复制了Jenkins系列漏洞发现者(Orange.tw)在博客上公布的poc,***payload含有"Orange.tw"字样,可能被误认为是漏洞发现者在进行测试,因此我们..._cve-2019-1003000 jenkins rce 复现

如何使用计算机勾绘汇水面积,汇水面积怎么计算-程序员宅基地

文章浏览阅读853次。雨水汇水面积应按地面、屋面水平投影面积计算。高出屋面的侧墙,应附加其最大受雨面正投影的一半作为有效汇水面积计算。也就是54.6*27计算就好,如果考虑最大受雨面积的话需要给出楼梯间突出屋面的高度。假设高度为3米,计算在计算一个最大受雨面3*(9+4.5)/2就好。也就是,1474.2+20.25=1494.45平方米。汇水面积指的是雨水流向同一山谷地面的受雨面积。跨越河流、山谷修筑道路时,必须建桥..._水库汇水区怎么画

推荐文章

热门文章

相关标签