这里更多的是当作随身笔记使用,记录一下学到的知识,以便淡忘的时候能快速回顾

当前步骤是该项目的第一部分

第一部分(当前)

第二部分

大完结版本

直接上步骤,有类似的开发登陆注册也可以参考。

登陆注册的话,肯定要用到的就是Users表的注册和登录

先演示一下怎么通过数据库添加EF

如果已经完成EF添加数据库,点击跳到下一步

右键新建项,找到ADO.NET实体数据模型,点击下一步

选择第一个,来自数据库的EF设计器,

(如果想通过代码,构建数据库的话,选择第三个Code First模型)



先新建连接,在选择下一步

选好数据库选好服务器

选择你需要的表,点击完成

已完成EF添加数据库

构建一个BLL层,主要是注册和登录有关数据库的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;
using WebApplication1.DAL; namespace WebApplication1.BLL
{
public class UserService
{
//注册代码
public static bool register(string Id, string Pwd, string name, string phone)
{
Pwd = PasswordEncryption(Pwd);
using (OLMSDBEntities db = new OLMSDBEntities())
{
Users users = db.Users.Add(new Users
{
LoginId = Id,
LoginPwd = Pwd,
UserName = name,
RoleId = 2,
Phone = phone,
DateCreated = DateTime.Now,
UserStatus = 1 });
if (db.SaveChanges() > 0)
{
return true;
}
return false;
}
}
//登录代码
public static Users Login(string loginId, string loginPwd)
{
loginPwd = PasswordEncryption(loginPwd);
using (OLMSDBEntities db = new OLMSDBEntities())
{
Users users = db.Users.FirstOrDefault(u => u.LoginId == loginId
&& u.LoginPwd == loginPwd);
return users;
}
}
private static string PasswordEncryption(string pwd)
{ //创建SHA1加密算法对象
SHA1 sha1 = SHA1.Create(); //将原始密码转换为字节数组
byte[] originalPwd = Encoding.UTF8.GetBytes(pwd); //执行加密
byte[] encryPwd = sha1.ComputeHash(originalPwd); //将加密后的字节数组转换为大写字符串
return string.Join("", encryPwd.Select(b => string.Format("{0:x2}", b)).ToArray()).ToUpper();
}
} }

这里附上验证码的页面, 不需要的自行跳过

右键添加新建项,选择一般处理程序,点击完成即可



下面时handler的代码

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web;
using System.Web.SessionState; namespace WebApplication1
{
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler, IRequiresSessionState
{ public void ProcessRequest(HttpContext context)
{
//选取的颜色
Color[] colors = { Color.White };
//通过Bitmap构造Image
Image img = new Bitmap(100, 60);
//Graphics绘画Image
Graphics graphics = Graphics.FromImage(img); Random random = new Random(DateTime.Now.Millisecond);
//验证码的四位数
int charNum1 = random.Next('0', '9' + 1);
int charNum2 = random.Next('0', '9' + 1);
int charNum3 = random.Next('0', '9' + 1);
int charNum4 = random.Next('0', '9' + 1);
//把生成的随机数变成字符串,通过char进行转换
string validCode = string.Format($"{(char)charNum1}{(char)charNum2}{(char)charNum3}{(char)charNum4}");
//放进Session进行存储,记得继承接口,否则疯狂报空指针
context.Session["verification_Code"] = validCode;
//字体的大小和类别
Font font = new Font("宋体", 24);
//随机的颜色
Brush brush1 = new SolidBrush(colors[random.Next(0, colors.Length - 1)]);
//DrawString的四个参数,第一个是要写的字符,第二个是字体,第三个是颜色,第四个是坐标x,y
graphics.DrawString(((char)charNum1).ToString(), font, brush1, 7, -3);
Brush brush2 = new SolidBrush(colors[random.Next(0, colors.Length - 1)]);
graphics.DrawString(((char)charNum2).ToString(), font, brush2, 26, -9);
Brush brush3 = new SolidBrush(colors[random.Next(0, colors.Length - 1)]);
graphics.DrawString(((char)charNum3).ToString(), font, brush3, 50, 0);
Brush brush4 = new SolidBrush(colors[random.Next(0, colors.Length - 1)]);
graphics.DrawString(((char)charNum4).ToString(), font, brush4, 70, -7);
//保存,格式
context.Response.ContentType = "image/jpeg";
img.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
//释放资源
graphics.Dispose();
img.Dispose();
} public bool IsReusable
{
get
{
return false;
}
}
}
}
验证码的handler已完成

然后就是一个登录的页面Login.aspx

这里添加的css就不给予了,页面可自行调

我这里有一个验证码的图片,如果没做上面的验证码,请自行把验证码跳过

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="WebApplication1.Login" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="Assets/css/login.css" rel="stylesheet" />
<link href="Assets/css/animate.min.css" rel="stylesheet" />
<link href="Assets/css/font-awesome.min.css" rel="stylesheet" />
<link href="Assets/css/grids-responsive-min.css" rel="stylesheet" />
<link href="Assets/css/input.css" rel="stylesheet" />
<link href="Assets/css/main.css" rel="stylesheet" />
<link href="Assets/css/pure-min.css" rel="stylesheet" />
<link href="Assets/css/shop.css" rel="stylesheet" />
<title></title>
</head>
<body>
<form id="form1" runat="server"> <div class="login-container pure-g">
<div class="pure-u-md-3-4">
</div>
<div class="pure-u-md-1-4">
<h4>在线音乐商店</h4>
<asp:Panel ID="login" runat="server">
<div class="pure-u-1 pure-u-md-2-3">
登录账号
<br />
<asp:TextBox ID="login_id" runat="server"></asp:TextBox>
</div>
<div class="pure-u-1 pure-u-md-2-3">
登录密码 <br />
<asp:TextBox ID="login_pwd" TextMode="Password" runat="server"></asp:TextBox>
</div> <div class="pure-u-1 pure-u-md-2-3">
验证码 <br />
<asp:TextBox ID="login_Code" runat="server"></asp:TextBox> </div>
<%--验证码的地方,一定要注意路径--%>
<asp:Image ID="Image1" runat="server" ImageUrl="~/Handler1.ashx" onclick="this.src=this.src+1" Width="100" Height="40"/> </asp:Panel>
<%--注册--%>
<asp:Panel ID="rex" runat="server" CssClass="">
<div class="pure-u-1 pure-u-md-2-3">
登录账号
<br /> <asp:TextBox ID="reg_id" runat="server"></asp:TextBox>
</div>
<div class="pure-u-1 pure-u-md-2-3">
登录密码 <br /><asp:TextBox ID="reg_pwd" runat="server" TextMode="Password"></asp:TextBox>
</div>
<div class="pure-u-1 pure-u-md-2-3">
确认密码 <br />
<asp:TextBox ID="reg_pwd2" runat="server" TextMode="Password"></asp:TextBox>
</div>
<div class="pure-u-1 pure-u-md-2-3">
用户姓名
<br />
<asp:TextBox ID="reg_Name" runat="server"></asp:TextBox>
</div>
<div class="pure-u-1 pure-u-md-2-3">
联系电话
<br />
<asp:TextBox ID="reg_Phone" runat="server" TextMode="Phone"></asp:TextBox>
</div>
</asp:Panel>
<div>
<asp:Button ID="btnLogin" CssClass="pure-button button-default pure-button-primary" runat="server" Text="登录" OnClick="btnLogin_Click" /> <asp:Button ID="btnReg" CssClass="pure-button button-default " runat="server" Text="注册" OnClick="btnReg_Click" />
</div>
</div> </div> </form>
</body>
</html>

页面的后台代码,我页面用了panel,所有要分开显示,

两个panel的名称叫login和rex

//这里的管理员页面和用户页面我就不做了,可以自己根据需要做一下,注意路径啊

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebApplication1.BLL;
using WebApplication1.DAL; namespace WebApplication1
{
public partial class Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
login.Visible = true;
rex.Visible = false;
}
} protected void btnLogin_Click(object sender, EventArgs e)
{
if (login.Visible)
{
string loginId = login_id.Text;
string loginPwd = login_pwd.Text;
string loginCode = login_Code.Text;
//这里是我验证码存入的时候的verification_Code,取出的时候需要用存入时的单词
string snCode = Session["verification_Code"] as String;
//先判断是不是验证码相同
if (loginCode == snCode)
{
//这里时BLL的登录代码
Users users = UserService.Login(loginId, loginPwd);
if (users != null)
{
//看看是不是管理员,管理员的RoleId为1
//这两个页面我就不做了,自己做,稍微区分一下,主要是管理员和用户登录的不是一个页面
Session["user"] = users;
if (users.RoleId == 1)
{
Response.Redirect("~/Admin/Orders.aspx");
} else
{
Response.Redirect("~/User/WebForm1.aspx");
}
}
else
{
Response.Write("<script language='javascript'>");
Response.Write("alert('错误提示,账号或密码错误。单击“确定”返回网站。');");
Response.Write("</script>"); }
} } else
{
login.Visible = true;
rex.Visible = false;
}
} protected void btnReg_Click(object sender, EventArgs e)
{
if (rex.Visible)
{
string id = reg_id.Text;
string pwd = reg_pwd.Text;
string name = reg_Name.Text;
string phone = reg_Phone.Text;
bool bools = UserService.register(id, pwd, name, phone);
if (bools)
{
//这里用js是因为,Response的Redirect会覆盖掉Write的方法
string strUrl = "<script>alert('添加成功');window.location.href='Login.aspx'</script>";
Response.Write(strUrl);
//Response.Write("<script language='javascript'>");
//Response.Write("alert('添加成功');");
//Response.Write("</script>");
//Response.Redirect("Login.aspx");
}
else
{
Response.Write("<script language='javascript'>");
Response.Write("alert('添加失败');");
Response.Write("</script>"); } }
else
{
login.Visible = false;
rex.Visible = true;
}
}
}
}

效果图:

注册

点击注册,自动跳转到登录



点击登录



ASP.NET中使用Entity Framework开发登陆注册Demo的更多相关文章

  1. ASP.NET中使用Entity Framework开发增删改查的Demo(EF增删改查+母版页的使用)

    这里更多的是当作随身笔记使用,记录一下学到的知识,以便淡忘的时候能快速回顾 这里是该项目的第二部分, 第一部分 第二部分(当前部分) 大完结版本 此Demo是新建了一个音乐类型的web,然后使用母版页 ...

  2. 如何在ASP.NET Core中应用Entity Framework

    注:本文提到的代码示例下载地址> How to using Entity Framework DB first in ASP.NET Core 如何在ASP.NET Core中应用Entity ...

  3. ASP.NET MVC+EasyUI+Entity FrameWork 整合开发

    本文详细讲解怎么用ASP.NET MVC+EasyUI+Entity FrameWork 来开发一个项目 对于ASP.NET MVC的Jscript库,主要引用 <script type=.mi ...

  4. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点

    在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...

  5. 使用MiniProfiler给Asp.net MVC和Entity Framework号脉(附源码)

    在学习python开发框架pylons/pyramid的过程中,里面有个非常棒的页面性能监控功能,这样在开发过程中,你能清楚的知道当前页面的性能以及其它参数. 这里介绍一下如何给Asp.net MVC ...

  6. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第六章:管理产品图片——多对多关系(上篇)

    在这章中,我们将学习如何创建一个管理图片的新实体,如何使用HTML表单上传图片文件,并使用多对多关系将它们和产品关联起来,如何将图片存储在文件系统中.在这章中,我们还会学习更加复杂的异常处理,如何向模 ...

  7. ASP.NET Core 配置 Entity Framework Core - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 配置 Entity Framework Core - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 配置 Entity Fram ...

  8. Oracle中使用Entity Framework 6.x Code-First

    Oracle中使用Entity Framework 6.x Code-First方式开发 去年写过一篇EF的简单学习笔记,当时EF还不支持Oracle的Code-First开发模式,今天无意又看了下O ...

  9. 使用entity framework开发oracle

    A.vs2010 SP1 B.ODAC(http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html) ...

随机推荐

  1. 【FreeRTOS学习02】源码结构/数据类型/命名规则总结

    个人不是很喜欢FreeRTOS的编程风格,但是没办法,白嫖人家的东西,只能忍了,这里先简单总结一下: 相关文章 [FreeRTOS实战汇总]小白博主的RTOS学习实战快速进阶之路(持续更新) 文章目录 ...

  2. 存储过程——异常捕获&打印异常信息

    目录 0. 背景说明 1. 建立异常信息表ErrorLog 2. 建立保存异常信息的存储过程 3. 建立在SQL Server中打印异常信息的存储过程 4. 建立一个用于测试的存储过程抛出异常进行测试 ...

  3. webview的简单介绍和手写一个H5套壳的webview

    1.webview是什么?作用是什么?和浏览器有什么关系? Webview 是一个基于webkit引擎,可以解析DOM 元素,展示html页面的控件,它和浏览器展示页面的原理是相同的,所以可以把它当做 ...

  4. poi excel自动转换成javabean 支持引用类型属性二级转换

    最近项目需要使用excel导入功能,导入学生的时候需要指定所在班级,使用excel一次性导入! 将以前的代码改改支持属性内引用类的转换. 测试对象为User对象,javabean结构: private ...

  5. X-CTF(REVERSE高级) 666

    主函数输入的字符会和key比较长度和enflag比较内容,所以这道题的flag和输入有关 key长度为0x12,enflag的值为:izwhroz""w"v.K" ...

  6. UVA11038

    题目大意:见刘汝佳<算法竞赛入门经典——训练指南>P173 解题思路: 求出 0 到 m-1 这些数字中 0 出现的次数(此处要特判 m = 0 的情况),再求出 0 到 n 这些数字中 ...

  7. ExtJS按钮

    var toppanel = Ext.create('Ext.panel.Panel',{ layout : { type : 'absolute' }, bodyStyle : { backgrou ...

  8. linux连个文件都删除不了,什么鬼!

    前言 最近不是redis 6.0 出了吗,官网介绍最新稳定版本是 6.0.3 .于是,我就准备在自己的破小服务器上安装一下.于是,出现了后续的糟心事 (linux 下的文件正常删除不了). 下载了最新 ...

  9. go模板-代码生成器

    能用程序去做的事,就不要用手,编写自己的代码生成器就是用来解放你的双手,替你做一些重复性的工作. 上篇帖子写了模板的基础 go模板详说 ,有了基础就要做点什么东西,把所学到的东西应用起来才能更好的进步 ...

  10. Magicodes.SwaggerUI 已支持.NET Core 3.1

    Magicodes.SwaggerUI 通过配置文件简单配置即可快速完成SwaggerUI的配置,包括: SwaggerUI的文档信息 API分组 API隐藏 API JSON生成(枚举.API架构I ...