MVC3学习随记一

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

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

一、实例化上下文ObjectContext:

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

db_testEntities test =newdb_testEntities();

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

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

IQueryable<MvcTest.Models.T_UserInfo> list =fromdintest.T_UserInfoselectd;

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

第一种方法:使用SQO标准查询运算符查找所有数据列

List<MvcTest.Models.T_UserInfo> list =test.T_UserInfo.ToList();

第二种方法:使用linq语法查询

List<MvcTest.Models.T_UserInfo> list = (fromdintest.T_UserInfoselectd).ToList();

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

#region获取分页数据和数据条数///<summary>///获取分页数据和数据条数///</summary>///<param name="pageIndex">当前页</param>///<param name="i">数据条数</param>///<returns></returns>publicIQueryable<T_UserInfo> GetPageLoad(intpageIndex,outinti)

{

IQueryable<T_UserInfo> list = (fromdintest.T_UserInfoorderbyd.Idselectd).Skip<T_UserInfo>(5* (pageIndex -1))

.Take<T_UserInfo>(5);varcount =fromdintest.T_UserInfoselectd;

i= count.Count<T_UserInfo>();//记录条数returnlist;

}#endregion

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

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

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

#region查找数据列表///<summary>///查找数据列表并分页///</summary>///<returns></returns>publicintpageIndex=1;publicActionResult Index()

{stringpindex = Request.Params["index"];intpi =string.IsNullOrEmpty(pindex) ? pageIndex :int.Parse(pindex);ints=0;

ViewData["DataList"] = GetPageLoad(pi,outs);intdataCount =s;intpagecount = dataCount /5;//数据页数pagecount =dataCount %5!=0? pagecount +=1: pagecount;

ViewBag.pageCount= pagecount;//页数ViewBag.dataCount = dataCount;//条数ViewBag.pageindex =pi;//当前页returnView();

}#endregion

View视图代码如下:

1@using MvcTest.Models2@{3Layout =null;4}56<!DOCTYPE html>78<html>9<head>10<title>用户列表</title>11<style type="text/CSS">12#tab13{14border:1px solid #0094ff;15width:600px;16margin:10px auto;17border-collapse:collapse;18}19#tab th,td20{21border:1px solid #0094ff;22padding:5px;23}24</style>25<script type="text/javascript">26function doDel(id)27{28if(confirm('你确定要删除吗?')) {29window.location ="Dog/del/"+id;3031}32}3334function page(sta, pageIndex, pageCount) {35switch(sta) {36case"index":3738window.location ="?index=1";39

break;40case"prev":41pageIndex = pageIndex >1? parseInt(pageIndex -1,10) : pageIndex42window.location ="?index="+pageIndex;43

break;44case"next":45pageIndex = pageIndex < pageCount ? parseInt(pageIndex +1,10) : pageIndex;46window.location ="?index="+pageIndex;47

break;48case"last":49window.location ="?index="+pageCount;50

break;5152}53}5455function pageSta(pageIndex, sta) {56switch(sta){}5758}59</script>6061</head>62<body>63<div>64@{inti =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 uinViewData["DataList"]asIQueryable<T_UserInfo>)68{69i +=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>8586</div>87</body>88</html>

View Code

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

五、添加新数据:#region添加数据///<summary>///添加数据///</summary>///<param name="u"></param>///<returns></returns>[HttpPost]publicActionResult 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>();varnewUser=user.CreateObject();

newUser.Name=u.Name;

newUser.UserName=u.UserName;

newUser.Gender=u.Gender;

newUser.PassWord="123456";

user.AddObject(newUser);

test.SaveChanges();returnRedirectToAction("Index","Dog");

}#endregion

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

前台代码如下:

1@{2Layout =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{13border:1px solid #0094ff;14width:600px;15margin:10px auto;16border-collapse:collapse;17}18#tab th,td19{20border:1px solid #0094ff;21padding: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><selectname="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<selectname="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>7publicActionResult Del(intid)8{9try10{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//方法二:22ObjectSet<T_UserInfo> t = test.CreateObjectSet<T_UserInfo>();23T_UserInfo tu = t.Where("it.Id=@id",newObjectParameter("id",id)).First();24t.DeleteObject(tu);25test.SaveChanges();26returnRedirectToAction("Index","Dog");27}28catch(Exception ex)29{3031returnContent("删除出错"+ex.Message);32}33}34#endregion

View Code

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

七、修改操作:

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

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

View Code

接下来是修改:

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

View Code

效果如下:

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

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航