.net5 core Razor項目實戰系列之十一:操作日志查詢功能的實現(完結篇)


本篇完成最后一個功能,操作日志的顯示。操作日志功能只能查看,不能做其他任何的操作。

先到主菜單中加入【操作日志】菜單項,如下圖:

......

<li class="nav-item">
    <a class="nav-link text-dark" asp-area="" asp-page="/Auth/DeptList">【部門管理】</a>
</li>
<li class="nav-item">
    <a class="nav-link text-dark" asp-area="" asp-page="/Auth/UserList">【用戶管理】</a>
</li>
<li class="nav-item">
    <a class="nav-link text-dark" asp-area="" asp-page="/Auth/AuthSetting">【權限設置】</a>
</li>
<li class="nav-item">
    <a class="nav-link text-dark" asp-area="" asp-page="/Auth/LogList">【操作日志】</a>
</li>

......

然后到/Auth目錄下新增 LogList.cshtml 文件,如下圖:

LogList.cshtml 文件中代碼如下:

@page
@model AuthManagement.Pages.Auth.LogListModel
@{
    ViewData["Title"] = "操作日志";
}

<table style="border-collapse:collapse;border:solid 1px #c0c0c0;font-size:14px;" border="1" width="60%">
    <tr style="background-color:#e0e0e0;font-size:16px;">
        <td>表名</td>
        <td>操作人</td>
        <td>操作時間</td>
        <td>操作</td>
    </tr>
    @foreach (TLog log in Model.LogList)
    { 
    <tr>
        <td>@log.TableName</td>
        <td>@log.UserName</td>
        <td>@log.LogTime.ToString("yyyy-MM-dd")</td>
        <td><a href="/Auth/LogDetail?batno=@log.BatchNo" target="_blank">詳情</a></td><!--傳 batno 可以一次抓到關聯的2筆數據-->
    </tr>
    }
</table>

LogList.cshtml.cs 文件代碼如下:

namespace AuthManagement.Pages.Auth
{
    public class LogListModel : PageModel
    {
        private readonly AuthDbContext _context;

        //構造函數中對 AuthDbContext 做依賴注入
        public LogListModel(AuthDbContext context)
        {
            _context = context;
        }
         
        public List<TLog> LogList { get; private set; }//定義傳遞給頁面的屬性
         
        private void InitLogList() //給屬性賦值
        {
            //取出最近3天的數據,列表頁不顯示 table_data 字段的數據,因為數據太長了,
            //我們在每行末尾加一個詳情的連接打開單獨的頁面去看。
            //用 Select 取 TLog 中的 UserName,TableName,LogTime,BatchNo 這3個字段並賦值,然后用 Distinct()去掉重復值
            LogList = _context.TLogs.Where<TLog>(x => x.LogTime > DateTime.Now.AddDays(-3).Date)
                .Select(x=>new TLog { UserName = x.UserName, TableName = x.TableName, LogTime = x.LogTime, BatchNo=x.BatchNo })
                .Distinct().ToList<TLog>(); 
        }
         
        public void OnGet()
        {
            InitLogList();
        }
    }
}

編譯並運行項目,得到結果如下:

在 /Auth 目錄下新增 LogDetail.cshtml 文件顯示要查看的那2筆數據,代碼如下:

@page
@model AuthManagement.Pages.Auth.LogDetailModel
@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>操作日志明細</title> 
</head>
<body>
    @foreach (TLog log in Model.LogDetails)
    { 
    <textarea cols="40" rows="10" style="overflow:scroll;resize:both;">
        @log.TableData
    </textarea><br /><br />
    }
</body>
</html>

對應的LogDetail.cshtml.cs 文件代碼如下:

using System.Collections.Generic;
using System.Linq;
using AuthManagement.DbUtil.Entity;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace AuthManagement.Pages.Auth
{
    public class LogDetailModel : PageModel
    {
        private readonly AuthDbContext _context;

        //構造函數中對 AuthDbContext 做依賴注入
        public LogDetailModel(AuthDbContext context)
        {
            _context = context;
        }

        public List<TLog> LogDetails { get; private set; }//定義傳遞給頁面的屬性

        public void OnGet()
        {
            string batNo = Request.Query["batno"];
            //用lambda表達式以 BatchNo 為條件查詢,並將結果轉化為泛型 List<TLog>
            LogDetails = _context.TLogs.Where<TLog>(x => x.BatchNo == batNo).ToList<TLog>();
        }
    }
}

編譯后運行畫面如下:

實際項目中可以對此JSON數據做進一步的格式化,便於我們發現修改前后數據變化的差異。

注意:在 LogList.cshtmlLogDetail.cshtml 這兩個文件中我們遍歷 List 的時候都用到了 TLog 這個對象,

一般來說要在頁面頂部引用其名稱空間 : @using AuthManagement.DbUtil.Entity ,

因為這個名稱空間在幾乎所有的頁面都會用到,這里我們將其放在通用的引用文件 /Shared/_ViewImports.cshtml 中,如下圖:

代碼如下(見紅色部分):

@using AuthManagement
@using AuthManagement.DbUtil.Entity
@namespace AuthManagement.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM