使用三层架构实现简单的MVC登陆操作

转载:http://blog.csdn.net/agonie201218/article/details/44456847

对个别内容进行了修正!!!

一丶使用三层架构创建一个简单的MVC登录操作

   1.首先,创建一个项目以及BLL层、DAL层、Entity层,如图一:

                                          

图一

    2.创建一个数据库如图二:


图二

  3基本工作已做好,接下来就编BLL层、DAL层、Entity层。

     3.1先编Entity。Entity实体层(不属于三层架构的任意一层)定义一个类,主要用来保存以及传递数据库的信息。比如以图二的数据库为列,实体层代码如下:

   

[csharp] view plain copy
 print?
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.ComponentModel.DataAnnotations;  
  6.   
  7. namespace Entity  
  8. {  
  9.     public class UserInfo  
  10.     {  
  11.           
  12.         public int ID { getset; }  
  13.           
  14.         [Required(ErrorMessage="用户名不能为空")]  
  15.         public string UserName { getset; }  
  16.   
  17.         [Required(ErrorMessage = "密码不能为空")]  
  18.         public string UserPWD { getset; }  
  19.     }  
  20. }  

  这样就定义了一个实体层(定义的字段和数据库里的一样)。

 3.2 DAL层。DAL只提供基本的数据访问,在其内定义增删改查!比如登录(查)代码如下:

[csharp] view plain copy
 print?
  1. using Entity;  
  2. using System;  
  3. using System.Collections.Generic;  
  4. using System.Configuration;  
  5. using System.Data;  
  6. using System.Data.SqlClient;  
  7. using System.Linq;  
  8. using System.Text;  
  9. using System.Threading.Tasks;  
  10.   
  11. namespace DAL  
  12. {  
  13.     public class UserService  
  14.     {  
  15.         //获取用户信息  
  16.         public UserInfo GetUser(string userName)  
  17.         {  
  18.                 string sql ="select * from userinfo where UserName=@username ";  
  19.                 SqlParameter[] param = new SqlParameter[]{  
  20.                 new SqlParameter("@username",userName),  
  21.                 };  
  22.   
  23.                 // 执行  
  24.                  UserInfo user =new UserInfo ();  
  25.   
  26.                  using (SqlDataReader sdr = SqlHelper.ExecuteReader(sql, param))  
  27.                  {  
  28.                      while(sdr.Read())  
  29.                      {  
  30.                          user.UserName = sdr["UserName"].ToString();  
  31.                          user.UserPWD = sdr["UserPwd"].ToString();  
  32.                      }  
  33.   
  34.                        return user;  
  35.             }  
  36.         }  
  37.     }  
  38. }  

  首先得引入Entity,其次,需要注意的是必须把UserService这个类定义为public类型的,否则BLL层访问不到。代码就不一一解读了,多是一些很基础的语句。

注:1.SqlHelper是一个已经封装好的类,专门执行sql语句。这里也可以自己写sql执行语句。

 public static SqlDataReader ExecuteReader(string sql,params SqlParameter[] pms)
        {
            SqlConnection con = new SqlConnection(constr);
               using( SqlCommand cmd = new SqlCommand(sql, con))

{

if (pms != null)
                    {
                        cmd.Parameters.AddRange(pms);
                    }
                    try
                    {
                        con.Open();
                        return cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    }
                    catch (Exception)
                    {
                        con.Close();
                        con.Dispose();
                        throw;
                    }

}

                    
        }

2.须在web.config 里配置链接字符串。

  <connectionStrings>
    <add name="connstr" connectionString="Data Source=.;Initial Catalog=testdb;Integrated Security=True"/>
  </connectionStrings>


  3.3BLL层:

  

[csharp] view plain copy
 print?
  1. using DAL;  
  2. using Entity;  
  3. using System;  
  4. using System.Collections.Generic;  
  5. using System.Data;  
  6. using System.Linq;  
  7. using System.Text;  
  8. using System.Threading.Tasks;  
  9.   
  10. namespace BLL  
  11. {  
  12.     public class UserManager  
  13.     {  
  14.         public bool Login(string userName, string userPWD)  
  15.         {  
  16.             // 业务逻辑层 调用 数据访问层  
  17.             UserService service = new UserService();  
  18.             UserInfo user =  service.GetUser(userName);  
  19.             if (user == null || user.UserPWD != userPWD)  
  20.             {  
  21.                 return false;  
  22.             }  
  23.             else  
  24.             {  
  25.                 return true;  
  26.             }  
  27.         }  
  28.     }  
  29. }  

  首先还是得引入Entity和DAL。。。负责处理业务逻辑。通过获取UI传来的用户指令,执行业务逻辑,在需要访问数据源的时候,直接交个DAL进行处理。处理完成后,返回必要数据给UI。其实BLL层很简单,

4.设计简单的登陆页面

  1. <head>
  2. <script src="../MVCDemo/Scripts/jquery-1.10.2.js"></sctipt>
  3. </head>
  4. <body>  
  5.     <div>  
  6.      <form action="@Url.Content("~/Home/DoLogin")method="post">  
  7.         <table>  
  8.             <tr>  
  9.                 <td>用户名</td>  
  10.                 <td>  
  11.                    <input name="username" placeholder="用户名"required/>  
  12.                 </td>  
  13.             </tr>  
  14.             <tr>  
  15.                 <td>用户密码</td>  
  16.                 <td>  
  17.                     <input name="userpwd" type="password"  placeholder="用户密码required/>  
  18.                 </td>  
  19.             </tr>  
  20.             <tr>  
  21.                 <td colspan="2">  
  22.                     <input type="submit" value="登陆" />  
  23.                 </td> 
  24.                 <td>@Html.ValidationMessage("info")  </td>   
  25.             </tr>  
  26.         </table>  
  27.     </form>  
  28.          
  29.     </div>  
  30. </body>  

注释:action="@Url.Content("~/Home/DoLogin")method="post" 内~/Home/DoLogin",为“~/controller/action/”

也可以使用:@using (Html.BeginForm("DoLogin","Home")) {}

会生成一个表单,连接到对应Action Controller里面。

5.输入账号密码,点击提交按钮,将值交到控制器的DoLogin:

 

[csharp] view plain copy
 print?
  1. [httppost]
  2. public ActionResult DoLogin(string username,string userpwd)  
  3.        {  
  4.            // model 验证失败  
  5.            if (!ModelState.IsValid)  
  6.            {  
  7.                  
  8.                return View();  
  9.            }  
  10.            else  
  11.            {  
  12.               if (new UserManager().Login(username, userpwd))  
  13.               {  
  14.                  return Content("<script>alert('登入成功!!!');location.href='index';</script>");  
  15.               }  
  16.               else {   
  17.                   ModelState.AddModelError("info""用户名或密码错误!!!");  
  18.                   return View();  
  19.               }  
  20.   
  21.            }  
  22.              

6.运行结果:

二丶实现增删改查

  其实学会了登录功能后其他增删改查功能都是差不多的。只不过就是换了个sql语句,换汤不换药。我就不一一介绍了。
三、思路
login.cshtml内input为name="username"和name="userpwd"的值  --(传入控制器)--》HomeControl内[httppost]
 actionResult.Dologin()。Dologin()内调用业务逻辑层,业务逻辑层再调用数据访问层
发布了4 篇原创文章 · 获赞 21 · 访问量 9万+
展开阅读全文

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

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览