ASP.NET中使用Entity Framework開發登陸註冊Demo

直接上步驟,有類似的開發登陸註冊也可以參考。

登陸註冊的話,肯定要用到的就是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;
            }
        }
    }
}

效果圖:
註冊
在這裏插入圖片描述

點擊註冊,自動跳轉到登錄
在這裏插入圖片描述
點擊登錄
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章