您的位置:首页 > 编程语言 > ASP

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代码:
<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();
    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MVC框架 asp.net