MVC简单实现查询列表

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012788601/article/details/47374719

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




阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页