C#使用MVC框架实现登陆验证
步骤一:需求分析
我的目标是利用MVC框架实现简单登陆验证。从客户端输入用户名和密码。然后传给数据库验证。如果数据库存在此用户名ID和密码,则返回客户端账户姓名的成功提示。否则返回客户端失败信息。
步骤二:搭建MVC框架
新建项目>WEB>WEB应用程序
步骤三:先添加一个控制器,然后VIEWS文件夹下找到对应和控制器同名文件夹里面搭建VIEW界面样式,最后修改路由 确定能在浏览器访问
控制器:
public class LoginController : Controller
{
// GET: Login
public ActionResult Index()
{
return View("LoginView");
}
VIEW:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>登陆界面</title>
</head>
<body>
<form method="post" action="/Login/Login"> //action 提交后再返回到控制器处理此时可先用#代替
用户名:<input name="LoginId" type="text" /> <br />
密 码:<input name="LoginPwd" type="password" /> <br />
<input type="submit" value="登陆" /><br/>
@ViewData["info"] //浏览器获取控制器的内容
</form>
</body>
</html>
路由RouteConfig.cs
namespace MVCLogin
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional }
);
}
}
}
步骤四:浏览器访问没问题后,正式开始编写内容,首先编写Models模型部分。通常Models包含实体类、通用数据访问类、通用数据库访问类(ADO.NET)
1.实体类编写。编写用户登陆实体类。与数据库字段对应。
namespace MVCLogin.Models
{
/// <summary>
/// 登陆实体类,属性:登陆ID,登陆密码,用户名
/// </summary>
public class SysAdmin
{
public int LoginId { get; set; }
public String LoginPwd { get; set; }
public String AdminName{ get; set; }
}
}
2.通用数据库访问类,这里只编写查询的方法
namespace MVCLogin.Models
{
/// <summary>
/// 通用数据访问类
/// </summary>
public class SQLHelper
{
//定义数据库连接字符串
public static string connString = ConfigurationManager.ConnectionStrings["connString"].ToString(); //将数据库连接字符串写在Web.config中,这里通过ConfigurationManager类的ConnectionStrings属性调用
public static SqlDataReader getReader(string sql)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception ex)
{
throw ex;
}
}
}
Web.config加节点
<connectionStrings>
<add name="connString" connectionString="server=.; DataBase=SMDBWeb; Uid=sa;Pwd=abc.123"/>
</connectionStrings>
3.编写实体访问类。实体访问类的命名一般是实体类名+Service。具体操作实体,封装实体,返回实体对象
namespace MVCLogin.Models
{
/// <summary>
/// 数据访问类
/// </summary>
public class SysAdminService
{
/// <summary>
/// 根据登陆账号和密码登陆
/// </summary>
/// <param name="objSysAdmin"></param>
/// <returns></returns>
public SysAdmin AdminLogin(SysAdmin objSysAdmin)
{
string sql = "SELECT AdminName FROM dbo.Admins WHERE LoginId={0} and LoginPwd='{1}'";
sql=string.Format(sql, objSysAdmin.LoginId, objSysAdmin.LoginPwd);
SqlDataReader sdr = SQLHelper.getReader(sql);
if (sdr.Read())
{
objSysAdmin.AdminName = sdr["AdminName"].ToString(); //如果用户名ID和密码正确就返回用户名
}
else
{
objSysAdmin = null; //如果用户名ID和密码错误则清空对象
}
sdr.Close();
return objSysAdmin;
}
}
}
步骤五:编写控制器。控制器一般包含三个步骤。1.获取数据2.业务处理3.返回数据
namespace MVCLogin.Controllers
{
public class LoginController : Controller
{
// GET: Login
public ActionResult Index()
{
return View("LoginView");
}
public ActionResult Login()
{
//[1]获取数据
SysAdmin objSysAdmin = new SysAdmin
{
LoginId = Convert.ToInt32(Request["LoginId"]),
LoginPwd = Request["LoginPwd"].ToString()
};
//[2]业务处理
objSysAdmin=new SysAdminService().AdminLogin(objSysAdmin);
if (objSysAdmin!=null)
{
ViewData["info"] = "欢迎您," + objSysAdmin.AdminName; //使用ViewDate传输数据
}
else
{
ViewData["info"] = "用户名或密码错误";
}
//[3]返回数据
return View("LoginView");
}
}
}