MVC+三層+ASP.NET簡單登錄驗證

来源:https://www.cnblogs.com/whp0224/archive/2018/02/05/8418025.html
-Advertisement-
Play Games

通過製作一個登錄小案例來搭建MVC簡單三層 在View --Shared下創建一個母版頁: <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <script src="~/Scrip ...


通過製作一個登錄小案例來搭建MVC簡單三層

在View --Shared下創建一個母版頁:

<!DOCTYPE html>  
  
<html>  
<head>  
    <meta name="viewport" content="width=device-width" />  
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>  
    <script src="~/Scripts/jquery.validate.min.js"></script>  
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>  
    <link href="~/Content/LogIn.css" rel="stylesheet" />  
    <style type="text/css">  
        * {  
            margin: 0;  
            padding: 0;  
        }  
  
        .nav {  
            border: 2px solid border-right:none;  
            overflow: hidden;  
            float: center;  
        }  
  
            .nav ul li {  
                float: left;  
                width: 130px;  
                height: 20px;  
            }  
  
                .nav ul li a {  
                    width: 150px;  
                    height: 30px;  
                    text-align: center;  
                    line-height: 28px;  
                    display: block;  
                    border-right: 2px solid #FFFFFF;  
                    color: #FFF;  
                    width: 150px;  
                    font-weight: bold;  
                }  
  
                    .nav ul li a:hover {  
                        font-weight: bold;  
                        color: #FFFFFF;  
                    }  
  
                .nav ul li ul {  
                    position: absolute;  
                    display: none;  
                }  
  
                    .nav ul li ul li {  
                        float: none;  
                    }  
  
                        .nav ul li ul li a {  
                            width: 150px;  
                            height: 40px;  
                            border-right: none;  
                            border-top: 1px dotted #FFFFFF;  
                            background: #cc6698;  
                        }  
  
                .nav ul li:hover ul {  
                    display: block;  
                }  
  
        .barStyle {  
            color: #FFFFFF;  
            font-weight: bold;  
        }  
  
        .style1 {  
            text-align: center;  
            font-family: "Meiryo UI";  
            font-size: x-large;  
        }  
    </style>  
    <title>@ViewBag.Title</title>  
</head>  
<body>  
    <div id="header" style="background: #a6154c; width: 100%; height: 80px">  
        <p style="color: #ffffff; padding: 23px" class="style1">  
            <strong>User Management System</strong>  
        </p>  
    </div>  
  
  
    @if (Request.IsAuthenticated) <span style="color:#ff6600;"> //如果登陸成功</span>  
    {  
        <center>  
            <div class="nav" style="background: #a6154c; width: 100%; height: 30px">  
                <ul>  
                    <li>@Html.ActionLink("Home", "Index", "Home")</li> //主頁  
                    <li>@Html.ActionLink("Log Out", "LogOut", "Account")</li>    //導航欄添加一個  log Out  選項                  
                </ul>  
            </div>  
            <div><span>Current ID: @Context.User.Identity.Name</span> </div>  <span style="color:#ff6600;">//獲取當前登錄用戶</span>  
        </center>  
    }  
    else  <span style="color:#ff6600;">// 未登錄狀態</span>  
    {  
        <center>  
            <div class="nav" style="background: #a6154c; width: 100%; height: 30px">  
                <ul>  
                    <li>@Html.ActionLink("Home", "Index", "Home")</li>  //主頁  
                    <li>@Html.ActionLink("Log In", "login", "Account")</li>   //登陸選項                  
                </ul>  
            </div>  
            <b>Pls login first!</b>  //提示需要先登錄  
        </center>  
    }  
  
     
    <div>  
        @RenderBody()  
    </div>  
</body>  
</html>  
母版頁

 

註意:需要使用Request.IsAuthenticated身份驗證,記得在Web.config下添加如下代碼

<authentication mode="Forms">  
      <forms loginUrl="~/Account/Login" protection="All" timeout="60" path="/" />  
</authentication> 

接下來是控制器:AccountController.cs

 

public class AccountController : Controller  
    {  
        // GET: Account  
        public ActionResult Index()  
        {  
            return View();  
        }  
  
        public ActionResult Login()  
        {  
            return View();  
        }  
  
        [HttpPost]  
        public ActionResult Login(AccountEntity account)  
        {  
            if (new Bll.AccountManageBll().LoginCheck(account))  
            {  
                FormsAuthentication.SetAuthCookie(account.LogID, true);  
                return RedirectToAction("Index", "Home");  
            }  
            else  
            {  
                ViewBag.msg = "LogID or Password error.";  
                return View();  
            }  
        }  
  
        public ActionResult LogOut()  
        {  
            FormsAuthentication.SignOut();  
            return RedirectToAction("Index","Home");  
        }  
    }  
AccountController.cs

 

視圖:View--Account--Login.cshtml

@using Model  
@model AccountEntity  
@{  
    ViewBag.Title = "Login";  
    Layout = "~/Views/Shared/_LoginPartial.cshtml";  
}  
  
<br />  
<br />  
<br />  
@using (Html.BeginForm("Login", "Account", FormMethod.Post))  
{  
    <div class="full">  
        <div class="box">  
            <div class="title">  
                <span class="titlespan"><b>Log In</b></span>  
            </div>  
            <br />  
            <div class="ID">  
                <div><span>Login ID  </span> @Html.TextBoxFor(u => u.LogID)</div>  
                <div>@Html.ValidationMessageFor(u => u.LogID, "", new { style = "color:#F00;font-size:10px" })</div>  
            </div>  
            <div class="password">  
                <div><span>Password  </span>@Html.PasswordFor(u => u.Password)</div>  
                <div>@Html.ValidationMessageFor(u => u.Password, "", new { style = "color:#F00;font-size:10px" })</div> <span style="color:#ff6600;"> //校驗不能為空</span>  
            </div>  
            <div class="btnLogin">  
                <input type="Submit" name="Submit" value="Log In">  
            </div>  
        </div>  
    </div>  
        <div class="full">  
            <br />  
            <span style="color:#F00;font-size:12px;font-weight:bold">@ViewBag.msg</span><br />  
        </div>  
}  
Login.cshtml

Model層新建一個AccountEntity實體模型

public class AccountEntity  
{  
    [Required(ErrorMessage ="LogID cann't be empty!")] //Required 驗證  
    public string LogID { get; set; }  
  
    [Required(ErrorMessage = "Password cann't be empty!")]   //Required 驗證  
    public string Password { get; set; }  
  
    public AccountEntity() { } //無參構造函數  
    public AccountEntity(string ID,string Pwd)  //有參構造函數 為了測試數據  
    {  
        LogID = ID;  
        Password = Pwd;  
    }  
} 
AccountEntity

【DAL】數據訪問層AccountServiceDal.cs

【使用資料庫才需要使用,本實例測試數據在BLL層】

/// <summary>  
/// 獲取用戶信息  
/// </summary>  
/// <returns></returns>  
public List<AccountEntity> GetAccountInfo()  
{  
    string sqlStr = @"ProcSelAccount";  //存儲過程名  
    List<AccountEntity> accountList = new List<AccountEntity>();  
  
    using (SqlDataReader reader = SqlHelper.ExecReader(sqlStr))   //SqlHelper: SQL幫助類  
    {  
        while (reader.Read())  
        {  
            AccountEntity account = BuildSubject(reader);  
            accountList.Add(account);  
        }  
    }  
    return accountList;  
}  
  
public AccountEntity BuildSubject(SqlDataReader reader)  
{  
    AccountEntity account = new AccountEntity();  
    account.LogID = reader.GetString(0);  
    account.Password = reader.GetString(1);  
AccountServiceDal.cs

【BLL業務邏輯層】AccountManagerBLL.cs

public bool LoginCheck(AccountEntity account)  
{  
    bool flag = false;  
    // List<AccountEntity> accountList = new AccountServiceDal().GetAccountInfo();   //校驗資料庫中用戶數據,需使用此代碼  
  
    <span style="color:#ff0000;">//Test Account Data</span>  
    List<AccountEntity> accountList = new List<AccountEntity>()  //增加兩條用戶數據  
    {  
        new AccountEntity("Jarvis","ABC123"),     
        new AccountEntity("Admin","admin123")  
    };  
  
    foreach (AccountEntity accountInfo in accountList)  
    {  
        if(accountInfo.LogID == account.LogID && accountInfo.Password == account.Password)  
        {  
            flag = true;  
        }  
    }  
    return flag;  
}  
AccountManagerBLL.cs

登錄狀態:

 

驗證:

正確登錄:

登錄成功:

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 該系列教程系個人原創,並完整發佈在個人官網 "劉江的博客和教程" 所有轉載本文者,需在頂部顯著位置註明原作者及www.liujiangblog.com官網地址。 Python及Django學習QQ群:453131687 模型的元數據,指的是“除了欄位外的所有內容”,例如排序方式、資料庫表名、人類可讀 ...
  • 點擊回顧:《Java Web每天學之Servlet的工作原理解析》;《Java Web每天學之Servlet的工作原理解析(二)》 一、HttpServletRequest對象 1、介紹HttpServletRequest對象:主要作用是用來接收客戶端發送過來的請求信息,例如:請求的參數,發送的頭信 ...
  • 什麼是JSP內置對象 JSP引擎在調用JSP對應的jspServlet時, 會傳遞或創建9個與web開發相關的對象供jspServlet使用 。JSP技術的設計者為便於開發人員在編寫JSP頁面時獲得這些web對象的引用,特意定義了9個相應的變數, 開發人員在JSP頁面中通過這些變數就可以快速獲得這9 ...
  • 調試socket通信的時候,如果程式未正常結束,重新啟動會報埠被占用的錯誤。 一 查找被占用的埠 解決辦法如下:按win+R輸入cmd打開控制台,輸入 查看8080埠被哪個進程所占用,結果如下: 改圖顯示8080被進程id為5036的程式所占用。 二、通過任務管理器殺死相關的進程 方法一:使用 ...
  • ServiceStack是一個NET環境下的開源框架集合 包括輕量級的Orm框架,資料庫訪問,Json處理,Redis驅動等多個模塊,我們可以按需選擇使用 serviceStack.Ormlite serviceStack.Ormlite是一個.NET平臺快速實現ORM的數據訪問框架,支持多種主流的 ...
  • 轉載自:http://blog.csdn.net/baple/article/details/8131717 用ADOX創建ACCESS數據文件後,*.ldb文件出現,直到程式關閉後才消失。怎樣可以使那個*.ldb文件不出來呢?(具體它出來會有什麼壞處?我也沒細想,反正就是不想它出現。) Inter ...
  • 由於自己喜歡看小說,有的時候不方便手機看的時候希望在電腦上面看,但很多網站有廣告啊,於是封裝了套手機版的追書神器API 目前只做了搜索 詳情 書評 換源 正文 調用方式: 鏈接: https://pan.baidu.com/s/1pMNgMqZ 密碼: kpy6 ...
  • ASP.NET MVC框架提供了數據驗證的API,稱為"模型數據註解"或“模型元數據”,使我們可以使用聲明語法在模型中指定驗證的規則,常見的驗證API如下: 數據驗證API位於using System.ComponentModel.DataAnnotations;命名空間。 Movie.cs Ind ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...