MVC5 網站開發之七 用戶功能 1、角色的後臺管理

来源:http://www.cnblogs.com/mzwhj/archive/2016/03/13/5264035.html
-Advertisement-
Play Games

角色是網站中都有的一個功能,用來區分用戶的類型、劃分用戶的許可權,這次實現角色列表瀏覽、角色添加、角色修改和角色刪除。 目錄 奔跑吧,代碼小哥! MVC5網站開發之一 總體概述 MVC5 網站開發之二 創建項目 MVC5 網站開發之三 數據存儲層功能實現 MVC5 網站開發之四 業務邏輯層的架構和基本...


角色是網站中都有的一個功能,用來區分用戶的類型、劃分用戶的許可權,這次實現角色列表瀏覽、角色添加、角色修改和角色刪除。

目錄

奔跑吧,代碼小哥!

MVC5網站開發之一 總體概述

MVC5 網站開發之二 創建項目

MVC5 網站開發之三 數據存儲層功能實現

MVC5 網站開發之四 業務邏輯層的架構和基本功能

MVC5 網站開發之五 展示層架構

MVC5 網站開發之六 管理員 1、登錄、驗證和註銷

MVC5 網站開發之六 管理員 2、添加、刪除、重置密碼、修改密碼、列表瀏覽

MVC5 網站開發之七 用戶功能 1、角色的後臺管理

 

一、業務邏輯層

1、角色模型

Ninesky.Core【右鍵】->添加->類,輸入類名Role。

引用System.ComponentModel.DataAnnotations命名空間

using System.ComponentModel.DataAnnotations;

namespace Ninesky.Core
{
    /// <summary>
    /// 角色
    /// </summary>
    public class Role
    {
        [Key]
        public int RoleID { get; set; }

        /// <summary>
        /// 名稱
        /// </summary>
        [Required(ErrorMessage ="必須輸入{0}")]
        [StringLength(20,MinimumLength =2, ErrorMessage ="{0}長度為{2}-{1}個字元")]
        [Display(Name ="名稱")]
        public string Name { get; set; }

        /// <summary>
        /// 說明
        /// </summary>
        [StringLength(1000, ErrorMessage = "{0}必須少於{1}個字元")]
        [Display(Name = "說明")]
        public string Description { get; set; }

    }
}

2、添加表映射

打開Ninesky.Core/NineskyContext.cs,添加Role表映射

image

3、遷移數據

1)、啟用數據遷移

image

在【工具欄】->【工具】->NuGet包管理器->程式包管理器控制台。

image

輸入命令 Enable-Migrations 回車,為Ninesk.Core啟用數據遷移。

打開Ninesky.Core/Migrations/Configuration.cs文件

image

,將 AutomaticMigrationsEnabled = false;改為 AutomaticMigrationsEnabled = ture;來啟用自動遷移。

image

2)、更新數據表

運行命令Update-Database。提示錯誤:There is already an object named 'Administrators' in the database.

這是因為先生成了Administrators表後啟用的數據遷移。在更新表的時候視圖創建Administrators表失敗。

image

打開伺服器資源管理器,如圖選擇Administrators【右鍵】->刪除。

image

刪除成功後再次運行Update-Database,執行成功。

因為剛纔刪除表的時候把管理員賬號也刪掉了,記得打開Administrators表添加一個管理員賬號,記得密碼可以輸入jZae727K08KaOmKSgOaGzww/XVqGr/PKEgIMkjrcbJI= 這是123456加密後的字元串。

4、角色管理

Ninesky.Core【右鍵】->添加->類,輸入類名RoleManager,類繼承自BaseManager<Role>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Ninesky.Core
{
    /// <summary>
    /// 角色管理
    /// </summary>
    public class RoleManager:BaseManager<Role>
    {
    }
}

 

二、展示層

 

Ninesky.Web/Areas/Control/Controllers【右鍵】->添加->控制器。選擇 MVC5 控制器 – 空, 輸入控制器名稱RoleController。

在控制器中引入命名空間Ninesky.Core;

添加變數private RoleManager roleManager = new RoleManager();

為控制器添加身份驗證[AdminAuthorize]

1、消息提示

在進行操作的時候經常會需要對操作成功、失敗、發生錯誤進行提示,所以專門做一個提示的模型類Prompt。

1)、添加類

Ninesky.Web/Models【右鍵】->添加->類  輸入類名Prompt

using System.Collections.Generic;

namespace Ninesky.Web.Models
{
    /// <summary>
    /// 提示
    /// </summary>
    public class Prompt
    {
        /// <summary>
        /// 標題
        /// </summary>
        public string Title { get; set; }

        /// <summary>
        /// 消息
        /// </summary>
        public string Message { get; set; }

        /// <summary>
        /// 按鈕組
        /// </summary>
        public List<string> Buttons { get; set; }
    }
}

2、在控制器中引入類的命名空間

在Rolecontroller中引用命名空間Ninesky.Web.Models。

3、添加視圖

Ninesky.Web/Areas/Control/Views/Shared【右鍵】->添加->視圖

image

 

@model Ninesky.Web.Models.Prompt

@{
    ViewBag.Title = Model.Title;
}

@section SideNav{@Html.Partial("SideNavPartialView")}

<ol class="breadcrumb">
    <li><span class="glyphicon glyphicon-home"></span>  @Html.ActionLink("首頁", "Index", "Home")</li>
    <li class="active">@Model.Title</li>
</ol>

<div class="panel panel-default">
    <div class="panel-heading"><div class="panel-title">@Model.Title</div></div>
    <div class="panel-body">
        <p>@Html.Raw(Model.Message)</p>
        @if(Model.Buttons!=null && Model.Buttons.Count > 0) {
        <p>
            @foreach(var item in Model.Buttons)
            {
                @Html.Raw(item+ "&nbsp;&nbsp;")

            }
        </p>
        }
    </div>
</div>

2、管理員列表

1)、返回列表方法(Json方式)

在控制中添加方法 ListJson() ,返回類型 JsonResoult

/// <summary>
        ///  列表【Json】
        /// </summary>
        /// <returns></returns>
        public JsonResult ListJson()
        {
            return Json(roleManager.FindList());
        }

2、添加角色首頁視圖

在index()方法【右鍵】->添加視圖

image

@{
    ViewBag.Title = "角色管理";
}

@section SideNav{@Html.Partial("SideNavPartialView")}

<ol class="breadcrumb">
    <li><span class="glyphicon glyphicon-home"></span>  @Html.ActionLink("首頁", "Index", "Home")</li>
    <li>@Html.ActionLink("用戶管理", "Index", "User")</li>
    <li class="active">@Html.ActionLink("角色管理", "Index", "Role")</li>
</ol>

<table id="admingrid"></table>
@section style{
    @Styles.Render("~/Content/bootstrapplugincss")
}

@section scripts{
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/bundles/bootstrapplugin")
    <script type="text/javascript">
        $(document).ready(function () {
            //表格
            var $table = $('#admingrid');
            $table.bootstrapTable({
                showRefresh: true,
                showColumns: true,
                showFooter: true,
                method: "post",
                url: "@Url.Action("ListJson")",
                columns: [
                    { title: "ID", field: "RoleID" },
                    { title: "名稱", field: "Name", formatter: function (value, row, index) { return "<a href='@Url.Action("Modify", "Role")/" + row.RoleID + "'>" + value + "</a>" } },
                    { title: "說明", field: "Description" },
                    { title: "操作", field: "RoleID", formatter: function (value) { return "<a class='btn btn-sm btn-danger' data-operation='deleterole' data-value='" + value + "'>刪除</a>" } }
                ],
                onLoadSuccess: function () {
                    //刪除按鈕
                    $("a[data-operation='deleterole']").click(function () {
                        var id = $(this).attr("data-value");
                        BootstrapDialog.confirm("你確定要刪除" + $(this).parent().parent().find("td").eq(1).text() + "嗎?", function (result) {
                            if (result) {
                                $.post("@Url.Action("DeleteJson", "Role")", { id: id }, function (data) {
                                    if (data.Code == 1) {
                                        BootstrapDialog.show({
                                            message: "刪除角色成功",
                                            buttons: [{
                                                icon: "glyphicon glyphicon-ok",
                                                label: "確定",
                                                action: function (dialogItself) {
                                                    $table.bootstrapTable("refresh");
                                                    dialogItself.close();
                                                }
                                            }]

                                        });
                                    }
                                    else BootstrapDialog.alert(data.Message);
                                }, "json");
                            }
                        });
                    });
                    //刪除按鈕結束
                }
            });
            //表格結束
        });
    </script>
}

3、導航視圖

導航視圖顯示在視圖的左側,對該控制器下的功能進行導航

Ninesky.Web/Areas/Control/Views/Role【右鍵】->添加->視圖

<div class="panel panel-default">
    <div class="panel-heading">
        <div class="panel-title"><span class="glyphicon glyphicon-user"></span> 用戶管理</div>
    </div>
    <div class="panel-body">
        <div class="list-group">
            <div class="list-group-item"><span class="glyphicon glyphicon-plus"></span>  @Html.ActionLink("角色添加", "Add", "Role")</div>
            <div class="list-group-item"><span class="glyphicon glyphicon-list"></span>  @Html.ActionLink("角色管理", "Index", "Role")</div>
        </div>
    </div>
</div>

4、添加角色

1)、添加方法

在控制器中添加Add方法

/// <summary>
        ///  添加
        /// </summary>
        /// <returns></returns>
        public ActionResult Add()
        {
            return View();
        }

2)、添加視圖

在方法上右鍵添加視圖

image

 

@model Ninesky.Core.Role

@{
    ViewBag.Title = "添加角色";
}

@section SideNav{@Html.Partial("SideNavPartialView")}

<ol class="breadcrumb">
    <li><span class="glyphicon glyphicon-home"></span>  @Html.ActionLink("首頁", "Index", "Home")</li>
    <li>@Html.ActionLink("用戶管理", "Index", "User")</li>
    <li>@Html.ActionLink("角色管理", "Index", "Role")</li>
    <li class="active">添加角色</li>
</ol>

@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Description, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Description, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Description, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="保存" class="btn btn-default" />
            </div>
        </div>
    </div>
}

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

3)、添加提交數據的接收處理方法

在控制器中添加Add方法的post方法

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Add(Role role)
        {
            if (ModelState.IsValid)
            {
                if (roleManager.Add(role).Code == 1)
                {
                    return View("Prompt", new Prompt() { Title = "添加角色成功",
                        Message ="你已成功添加了角色【"+ role.Name+"",
                        Buttons = new List<string>() { "<a href=\"" + Url.Action("Index", "Role") + "\" class=\"btn btn-default\">角色管理</a>", "<a href=\"" + Url.Action("Add", "Role") + "\" class=\"btn btn-default\">繼續添加</a>"}
                    });
                }
            }
            return View(role);
        }

5、管理員資料修改

1)、添加方法

在控制器中添加Modify方法。

/// <summary>
        /// 修改
        /// </summary>
        /// <param name="id">RoleID</param>
        /// <returns></returns>
        public ActionResult Modify(int id)
        {
            var _role = roleManager.Find(id);
            if(_role == null) return View("Prompt", new Prompt()
            {
                Title = "錯誤",
                Message = "ID為【" + id + "】的角色不存在",
                Buttons = new List<string>() { "<a href=\"" + Url.Action("Index", "Role") + "\" class=\"btn btn-default\">角色管理</a>"}
            });
            return View(_role);
        }

2)、添加視圖

在方法中右鍵添加視圖

image

代碼如下:

@model Ninesky.Core.Role

@{
    ViewBag.Title = Model.Name;
}

@section SideNav{@Html.Partial("SideNavPartialView")}

<ol class="breadcrumb">
    <li><span class="glyphicon glyphicon-home"></span>  @Html.ActionLink("首頁", "Index", "Home")</li>
    <li>@Html.ActionLink("用戶管理", "Index", "User")</li>
    <li>@Html.ActionLink("角色管理", "Index", "Role")</li>
    <li class="active">修改</li>
</ol>


@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        @Html.HiddenFor(model => model.RoleID)

        <div class="form-group">
            @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Description, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Description, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Description, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="保存" class="btn btn-default" />
            </div>
        </div>
    </div>
}

@section Scripts {
    @Scripts.Render("~/bundles/jq

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

-Advertisement-
Play Games
更多相關文章
  • 屬性分為無參屬性和有參屬性(即索引器)。 屬性相對於欄位的優點不僅僅是為了封裝,還可以在讀寫的時候做一些額外操作,緩存某些值或者推遲創建一些內部對象,也適用於以線程安全的方式訪問欄位。 話說最基本的屬性就不講了,太平常了。 基本上很多文章都是講屬性的好處的,所以下麵就講一下屬性的不足: 屬性不能作為
  • C#語法中有個特別的關鍵字yield, 它是乾什麼用的呢? 來看看專業的解釋: yield 是在迭代器塊中用於向枚舉數對象提供值或發出迭代結束信號。它的形式為下列之一:yield return <expression>;yield break   看如下例子:         上面的例子是實現了一個
  • GC記憶體回收的時機的確具有不確定性,所以GC不是救命稻草,請一定不要忘記發佈程式的時候,使用Release編譯模式!
  • 給Model中變數賦初始值就OK了。
  •   本篇體驗擴展StringBuilder使之支持鏈式方法。這裡有一個根據鍵值集合生成select元素的方法。     以上,html.AppendFormat("<select id=\"{0}\" name=\"{0}\">", id);html.AppendLine();可以對這兩個語句封裝,
  • 每一種編程語言,要想執行,就必須要轉換為目標操作系統能夠理解的語言才能執行,這種語言叫做本機代碼(native code)。C#也是一樣的,也要做這樣的轉換,但是它不是一處到位的,在.NET Framework這個平臺下,該過程分為兩個階段。 (1)C#代碼編譯為中間語言代碼的階段 在編譯C#代碼時
  • 年後回來,跟之前和幾個同事和朋友聊天,發現有兩個.net的和一個php的朋友都轉到了前端,真是出乎意料。自從之前的webapp興起後,前端感覺比後端吃香很多,總結朋友們轉的原因,大概就幾點 1.易上手,相對其他語言來說,作為後端人員,轉到前端,其實已經有了很好的底子和基礎了,畢竟以前多少都會和js,
  •   使用C#實現加減乘除演算法經常被用作新手練習。本篇來分別體驗通過委托、介面、匿名方法、泛型委托來實現。 加減乘除擁有相同的參數個數、類型和返回類型,首先想到了使用委托實現。     以上,委托用在了方法層面。如果在類層面,也可用介面封裝加減乘除的共性。     委托還可以結合匿名方法一起使用。  
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...