**
这几天一直在学习MVC。于是做了一个简单的登录界面,带简单前端样式。
百度云连接:链接:https://pan.baidu.com/s/1YFzWV9JZc72Krdlwgu3-VA
提取码:r21t
效果图:
数据表结构就懒的发了,直接根据实体类写就可以,就几个字段很简单。
1.目录结构如下:
2.建立数据访问类,由于只是简单的登录,所以只需要写一个简单的返回DataReader对象即可。webConfig连接数据库那一套就不再赘述了。
//在此之前需要先定义连接字符串
private static readonly string connString = ConfigurationManager.ConnectionStrings["connString"].ToString();
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;
}
}
3.编写实体类,在这里注意User是Sql关键字,所以一般不为表名,如果要使用加上[]即可。
/// <summary>
/// 用户登录实体类
/// </summary>
public class Users
{
public int Id { get; set; }
public string LoginId { get; set; }
public string LoginPwd { get; set; }
public string AdminName { get; set; }
}
4.数据层编写。
public Users getLogin(Users objUser)
{
StringBuilder objBuilder = new StringBuilder();
objBuilder.Append("select AdminName from ");
objBuilder.Append("Users where LoginId = '{0}'");
objBuilder.Append(" and LoginPwd = '{1}'");
string sql = string.Format(objBuilder.ToString(),objUser.LoginId,objUser.LoginPwd);
try
{
SqlDataReader objReader = SqlHerper.getReader(sql);
if (objReader.Read())
{
objUser.AdminName = objReader["AdminName"].ToString();
}
else {
objUser = null;
}
}
catch (Exception ex)
{
throw new Exception("出错"+ ex.Message);
}
return objUser;
}
5.BLL层编写,由于逻辑简单,所以就只是起到一个传递数据的作用,写不写它是无所谓的,但是既然是三层,所以还是写了。
public Users getLogin(Users objUser)
{
LoginService objService = new LoginService();
objUser = objService.getLogin(objUser);
if (objUser != null)
{
//这里是将用户名密码正确后把姓名保留到Session中,方便读取
HttpContext.Current.Session["CurrentAdmin"] = objUser;
}
return objUser;
}
6.控制器
[HttpPost]
public ActionResult getLogin(Users objUser)
{
objUser = new LoginManager().getLogin(objUser);
if (objUser != null)
{
return Content("<script>alert('登录成功');document.location='" + Url.Action("Index","Test") +"'</script>");
}
else
{
return Content("<script>alert('登录失败');document.location='" + Url.Action("Index","Login") +"'</script>");
}
}
7.前端实现,由于代码繁杂,就节选form表单里的。这里是使用了强类型视图,因为表单的name和实体类属性名一致,会自动映射获取数据。
@using (Html.BeginForm("getLogin", "Login", new { @class = "signup_form_form" })) {
<div class="signup_account" id="signup_account">
<div class="form_user">
<input type="text" name="LoginId" placeholder="用户名" id="signup_email"></div>
@* @Html.TextBox("LoginId")*@
<div class="form_password">
<input type="password" name="LoginPwd" placeholder="密码" id="signup_password"></div>
</div>
<input type="submit" id="signup_forms_submit" value="登录"/>
}
8.效果图(注册功能未做)
在这里插入图片描述