MVC简单实现查询列表

来源:互联网 发布:微信美女诱导支付源码 编辑:程序博客网 时间:2024/06/05 10:05

       学习理论是更好的体现方式应用于实践中.下边是用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();        } 

viewregister文件中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();
    




0 0
原创粉丝点击