MVC简单实现查询列表
2015-08-09 16:51
676 查看
学习理论是更好的体现方式应用于实践中.下边是用MVC框架实现的一个简单查询的例子.
先看一下MVC框架的项目目录文件:
在MVC这个项目中,最为关键的就是这三个文件了。分别为:controllers控制器文件,models模型文件,views视图文件,具体的就不再解释,见上篇博客《MVC架构与三层架构》。
在这里有一些潜在的约定。
1
控制器类命名以contoller结尾:如RegisterController
2
控制其类将会产生一个与之同名的在views文件夹下的文件夹:~/View/Register
3
控制器里的Action方法,也可在视图文件夹下生成一个同名的视图。如:Index.cshtml
下面用MVC实现一个简单的查询功能。
RegisterController控制器类:
/// <summary>
/// 查询 注册用户 列表
/// </summary>
/// <returns></returns>
public ActionResult Index()
{
//查询方式:使用Linq语句,查询 数据库里的用户列表数据
//*linq语句 .net编辑器会在编译程序集(中间代码)的时候,将linq语句转化为sql语句
//看起来像返回一个接口的对象,实际则是返回IQueryable接口的子类对象
IQueryable<Models.registerUser> query = from d in db.registerUser where d.isDel == "否" select d;
//直接将返回的query转成list集合,并返回查询的集合。
List<Models.registerUser> list = query.ToList();//真正查询数据库的是这一句;原因是EF延迟加载。
//2 将数据结合传给视图
//ViewBag.dataList = list;
ViewData["dataList"] = list;
return View();
}
view中register文件中index代码:
models中添加ADO数据模型即可。
那最后整体实现效果如图:
代码虽不多,但看起来却没有三层那样直观,三层中,你可以直观的看到D层中与数据库交互的部分,清晰明了的看到返回的数据,可是这里不一样,自我感觉这就是MVC的厉害之处吧!重点在于controller文件下的RegisterController控制器类的index方法了。这里涉及到EF延迟加载,官方的理解我不大清楚,但通过逐步调试,和sqlserver
profiler的数据追踪发现一个问题就是:
IQueryable<Models.registerUser> query = from d in db.registerUser where d.isDel == "否" select d;
这句看起来类似于sql语句,所以我的第一直观感觉返回的query就已经包含了所查询的结果,其实不然,query实际则是返回IQueryable接口的子类对象,其类型为DbQuery<T>,支持延迟加载:只有当使用到数据的时候,才去查询数据库。此步骤通过监视窗口输入query.tolist()来生成了sql语句。所以真正看到返回结果的代码为:
先看一下MVC框架的项目目录文件:
在MVC这个项目中,最为关键的就是这三个文件了。分别为:controllers控制器文件,models模型文件,views视图文件,具体的就不再解释,见上篇博客《MVC架构与三层架构》。
在这里有一些潜在的约定。
1
控制器类命名以contoller结尾:如RegisterController
2
控制其类将会产生一个与之同名的在views文件夹下的文件夹:~/View/Register
3
控制器里的Action方法,也可在视图文件夹下生成一个同名的视图。如:Index.cshtml
下面用MVC实现一个简单的查询功能。
RegisterController控制器类:
/// <summary>
/// 查询 注册用户 列表
/// </summary>
/// <returns></returns>
public ActionResult Index()
{
//查询方式:使用Linq语句,查询 数据库里的用户列表数据
//*linq语句 .net编辑器会在编译程序集(中间代码)的时候,将linq语句转化为sql语句
//看起来像返回一个接口的对象,实际则是返回IQueryable接口的子类对象
IQueryable<Models.registerUser> query = from d in db.registerUser where d.isDel == "否" select d;
//直接将返回的query转成list集合,并返回查询的集合。
List<Models.registerUser> list = query.ToList();//真正查询数据库的是这一句;原因是EF延迟加载。
//2 将数据结合传给视图
//ViewBag.dataList = list;
ViewData["dataList"] = list;
return View();
}
view中register文件中index代码:
<html> <head> <title >Index</title> <style type="text/css" > #tbList { border:1px solid #0094ff; width:600px; margin:10px auto; border-collapse :collapse ; } #tbList th,td{ border:1px solid #0094ff; padding :10px; } </style> </head> <body> <table id="tbList"> <tr> <th>ID</th> <th>姓名</th> <th>密码</th> <th>电话</th> <th>邮箱</th> <th>删除</th> <th>修改</th> </tr> <!--遍历Action方法 设置给viewdata的集合数据,生成html代码--> @foreach (registerUser a in ViewData["DataList"] as List<registerUser>) { <tr> <td>@a.userID </td> <td>@a.loginName </td> <td>@a.pwd </td> <td>@a.phone </td> <td>@a.email </td> <td > <a href="/Register/del/@a.userID ">删除</a> </td> <td > <a href="/Register/modify/@a.userID ">修改</a> </td> </tr> } </table> </body> </html>
models中添加ADO数据模型即可。
那最后整体实现效果如图:
代码虽不多,但看起来却没有三层那样直观,三层中,你可以直观的看到D层中与数据库交互的部分,清晰明了的看到返回的数据,可是这里不一样,自我感觉这就是MVC的厉害之处吧!重点在于controller文件下的RegisterController控制器类的index方法了。这里涉及到EF延迟加载,官方的理解我不大清楚,但通过逐步调试,和sqlserver
profiler的数据追踪发现一个问题就是:
IQueryable<Models.registerUser> query = from d in db.registerUser where d.isDel == "否" select d;
这句看起来类似于sql语句,所以我的第一直观感觉返回的query就已经包含了所查询的结果,其实不然,query实际则是返回IQueryable接口的子类对象,其类型为DbQuery<T>,支持延迟加载:只有当使用到数据的时候,才去查询数据库。此步骤通过监视窗口输入query.tolist()来生成了sql语句。所以真正看到返回结果的代码为:
List<Models.registerUser> list = query.ToList();
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- 星外ASP.Net的安全设置相关说明
- C#、ASP.NET通用扩展工具类之TypeParse
- lua开发中实现MVC框架的简单应用
- C#、ASP.NET通用扩展工具类之LogicSugar
- C#、ASP.NET通用工具类IsWhat?(可以判断数字、身份证、数据类型等等)
- 程序中常用的种代码
- ASP.NET、ASP、PHP、JSP之间有什么区别?
- ASP.NET页面间的传值的几种方法
- 入侵ASP.net网站的经验附利用代码
- asp.net OleDbCommand 的用法
- jquery调用asp.net 页面后台的实现代码
- asp.net中的check与uncheck关键字用法解析
- ASP.NET MVC 4 捆绑和缩小实例介绍
- ASP.Net Post方式获取数据流的一种简单写法
- asp.net动态产生checkbox(数据源为DB或内存集合)
- Asp.Net 和 AJAX.Net 的区别第1/2页
- ASP.NET仿新浪微博下拉加载更多数据瀑布流效果
- ASP.NET通过自定义函数实现对字符串的大小写切换功能
- asp.net利用后台实现直接生成html分页的方法