当前位置:编程学习 > asp >>

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(11)-验证码实现和底层修改

(1)在前面我写ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑曾的封装 这篇博客的时候,有一位博友(@Qlin)提出了我在项目底层些查询的时候为什么不用Expression<Func<T,bool>>,因为当时我实现的代码是Func<T,bool> wherelambda来定义的,当时的代码如下:


 1         //实现对数据库的查询  --简单查询
 2         IQueryable<T> LoadEntities(Func<T, bool> whereLambda);
 3
 4         /// <summary>
 5         /// 实现对数据的分页查询
 6         /// </summary>
 7
 8         /// <typeparam name="S">按照某个类进行排序</typeparam>
 9
10         /// <param name="pageIndex">当前第几页</param>
11
12         /// <param name="pageSize">一页显示多少条数据</param>
13
14         /// <param name="total">总条数</param>
15
16         /// <param name="whereLambda">取得排序的条件</param>
17
18         /// <param name="isAsc">如何排序,根据倒叙还是升序</param>
19
20         /// <param name="orderByLambda">根据那个字段进行排序</param>
21
22         /// <returns></returns>
23
24         IQueryable<T> LoadPageEntities<S>(int pageIndex, int pageSize, out int total, Func<T, bool> whereLambda,  bool isAsc, Func<T, S> orderByLambda);  (2)那么根据那位博友提出来的意见,我查看资料,发现他们还真的有很大的区别,这里我就简单的说一下他们的区别,并且非常感谢博友们能提出这样的问题,希望广大博友们能真心的提出来项目中的问题,我将虚心接受。

  (3)那么他们有什么区别呢?网上的资料是这样说的,Func<T,bool>本身就是一个委托(delegate),而Expression<Func<T,bool>>确实一个表达式,只有在编译之后才会变成委托,那么在EF中到底使用哪一个呢?又是为什么呢?其实如果我们写成Func<T,bool>类型的便来那个如果作为参数传递给where方法进行Linq查询时,Entity FrameWork将会产生全表查询,将整个数据库表忠的数据加载到内存中,然后再内存中根据where中的条件进一步查询,而Expression<Func<t,bool>>只是查询出来你where条件中的数据,不用去进行全表查询,所以我们修改后的代码是:  


 1  //实现对数据库的查询  --简单查询
 2
 3         IQueryable<T> LoadEntities(Expression<Func<T, bool>> whereLambda);
 4
 5         /// <summary>
 6
 7         /// 实现对数据的分页查询
 8
 9         /// </summary>
10
11         /// <typeparam name="S">按照某个类进行排序</typeparam>
12
13         /// <param name="pageIndex">当前第几页</param>
14
15         /// <param name="pageSize">一页显示多少条数据</param>
16
17         /// <param name="total">总条数</param>
18
19         /// <param name="whereLambda">取得排序的条件</param>
20
21         /// <param name="isAsc">如何排序,根据倒叙还是升序</param>
22
23         /// <param name="orderByLambda">根据那个字段进行排序</param>
24
25         /// <returns></returns>
26
27         IQueryable<T> LoadPageEntities<S>(int pageIndex, int pageSize, out int total, Expression<Func<T, bool>> whereLambda,
28
29                                           bool isAsc, Expression<Func<T, S>> orderByLambda);  (4)上面我们简单的介绍了一下Func<T, bool>和Expression<Func<T, bool>>的使用区别,我查到了就这些资料,如果那位博友还能够详细的说明的话,真心希望你在下面留言,我将非常的感谢你们。
  (5)综上所述的话,这时候我们就要对我们项目中数据库访问层,数据库访问接口层,业务逻辑层和业务逻辑接口层的查询方法都进行修改,这里就不多说了,和上面的基本差不多。

2.登录页面的设计

  (1)首先我们到网上下载一个登录页面的Demo,然后经过修改之后放到我们MVC4的项目里面。

  (2)然后我们在项目中添加一个LoginController控制器,然后再在Index上面添加一个空视图,最后我们将我们前面下载的Demo中的代码部署到Index.cshtml页面之上,最后生成的静态页面如图所示:

   \

  (3)这时候我们就把静态页面设计好了,这里静态页面的代码我就不往出来贴了,在后面我会把主要的代码写出来的并且共享整个项目的,那么下来我们看到了我们的验证码没有实现,只是一个假的图标在哪里,这时候我们开始着手验证码的设计。

3.如何设计验证码的实现

  (1)通过上图我们看到现在我们已经实现了页面的展示,那么我们的验证码还没有,现在开始我们设计验证码,首先看我前台验证码这里的代码是:


 1 <ul>
 2
 3    <li class="user_main_text">验证码: </li>
 4
 5    <li class="user_main_input">
 6
 7        <input type="text" class="TxtPasswordCssClass" id="Code" name="Code">
 8
 9    </li>
10
11 </ul>
12
13 <ul>
14
15    <li class="user_main_text">验证码: </li>
16
17    <li class="user_main_input">
18
19 <img src="/Login/CheckCode?ID=1" id="imgCode" alt="单击可刷新" onclick="ClickRemoveChangeCode()"  />
20
21 <a href="javascript:void(0)" onclick="ClickRemoveChangeCode();return false;">看不清</a>
22
23     </li>
24
25 </ul>  (2)首先我们看到我们绑定验证码的这里是这样写的,<img src=”/Login/CheckCode?ID=1”>,那么前面的src绑定的地址什么意思呢?他的意思就是我们在Login控制器下面含有一个CheckCode方法来实现验证码的读取。

  (3)我们要实现验证码,首先我们就要写一个生成验证码的类,没什么难度,网上一搜一大推,下面就是我封装的生成验证码的类,首先我们在LYZJ.UserLimitMVC.Common类库下面新建一个KenceryValidateCode.cs类来存放生成验证码的代码,在这里我们需要给类库引入命名空间System.Drawing。最终的代码如下:


  1 namespace LYZJ.UserLimitMVC.Common
  2
  3 {
  4
  5     public class KenceryValidateCode
  6
 

补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,