.net5 core Razor项目实战系列之六:部门管理功能的实现(新增和修改功能)

本篇实现新增和修改的功能。

在部门列表页增加一个新增按钮,用户点击后弹出一个新增部门的页面 DeptEdit.cshtml,

考虑到修改部门信息的时候可以复用此页面,故在新增的时候传递一个参数 deptid=0,

在列表页每行的末尾增加一个修改按钮,点击的时候调用 DeptEdit.cshtml 页面并传值 deptid=xxx,

这样在DeptEdit.cshtml 页可以通过判断是否 deptid>0 来决定页面是做新增还是修改的操作,列表页的效果如下:
.net5 core Razor项目实战系列之六:部门管理功能的实现(新增和修改功能)

 

DeptList.cshtml页面代码如下(见红色部分):

@page
@model AuthManagement.Pages.Auth.DeptListModel
@using AuthManagement.DbUtil.Entity
@{
    ViewData["Title"] = "部门管理";
}

<table border="1" width="60%">
    <tr style="background-color:antiquewhite;height:40px;">
        <td>编号</td>
        <td>名称</td>
        <td>创建时间</td>
        <td><a href="/Auth/DeptEdit?deptid=0" target="_blank">新增部门</a></td>
    </tr>
    @foreach (TDept item in Model.DeptList) //遍历输出部门信息
    {
    <tr style="height:30px;">
        <td>@item.DeptId</td>
        <td>@item.DeptName</td>
        <td>@item.CreateTime</td>
        <td>
            <a href="/Auth/DeptEdit?deptid=@item.DeptId" target="_blank">修改</a>&nbsp;&nbsp;&nbsp;
            <a href="/Auth/DeptList?deptid=@item.DeptId" target="_self" onclick="return confirm('确定要作废吗?');">作废</a>        
        </td>
    </tr>
    }
    @if (Model.DeptList.Count == 0)
    {
        <tr style="height:30px;">
            <td colspan="4" align="center">没有查询到部门数据!</td>
        </tr>
    }
</table>

 

在Auth文件夹下新增 DeptEdit.cshtml 文件,代码如下:

@page
@model AuthManagement.Pages.Auth.DeptEditModel
@{
    Layout = null; //这里不需要使用布局页,设为null就可以了
}

<form method="post">

    <table style="width:400px;border-collapse: collapse;border: solid 1px #c0c0c0;">
        <tr style="background-color:antiquewhite;height:40px;">
            <td>&nbsp; @Model.SubjectName</td>
        </tr>
        <tr style="height:30px;border:solid 1px #c0c0c0;"> 
            <td style="font-size:15px;">
                &nbsp;&nbsp;&nbsp; 部门名称:
                <input type="text" style="font-size:15px;" size="25" maxlength="10" name="deptname" value="@Model.DeptName" />
            </td>
        </tr>
        <tr style="height:30px;border:solid 1px #c0c0c0;">
            <td align="center">
                <button type="submit">保存</button>&nbsp;&nbsp;&nbsp;
                <button onclick="javascript: window.close();">关闭</button>
            </td>
        </tr>
    </table>

</form>

 

DeptEdit.cshtml.cs中的编码如下:

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

        //构造函数中对AuthDbContext做依赖注入
        public DeptEditModel(AuthDbContext context)
        {
            _context = context;
        }

        public string SubjectName { get; set; }
        public string DeptName { get; set; }

        public void OnGet()
        {
            SubjectName = "新增部门";
            DeptName = "";
            string deptId = Request.Query["deptid"];
            if (int.TryParse(deptId, out int did))
            {
                if (did > 0) 
                { 
                    SubjectName = "修改部门";
                    //如果是修改要初始化部门名称
                    TDept dept = _context.TDepts.Find(did);
                    DeptName = dept.DeptName;                
                }
            }
        }
    }
}

 

运行页面,点新增时画面如下:

.net5 core Razor项目实战系列之六:部门管理功能的实现(新增和修改功能)

点修改时画面如下:

.net5 core Razor项目实战系列之六:部门管理功能的实现(新增和修改功能)

 

当用户输入部门名称后点"保存"按钮,代码如下:

     public void OnPost()
        {
            string deptName = Request.Form["deptname"];
            string deptId = Request.Query["deptid"];
            if (int.TryParse(deptId, out int did))
            {
                if (did > 0) //传递过来的deptid值 >0 则修改,否则新增。
                {
                    ModifyDept(did, deptName);
                }
                else
                {
                    int newDeptId = AddDept(deptName);
                    deptId = newDeptId.ToString();
                }
            }
            //执行完之后让页面重新加载一下避免用户刷新的时候数据再次回传
            Response.Redirect("/Auth/DeptEdit?deptid="+ deptId);
        }

     //新增部门
        private int AddDept(string deptName)
        {
            TDept dept = new TDept
            {
                DeptName = deptName,
                IsValid = 1,
                CreateTime = DateTime.Now
            };
            _context.TDepts.Add(dept);
            _context.SaveChanges();            

       return dept.DeptId; //返回的部门编号一边刷新页面 }      //修改部门 private void ModifyDept(int deptId, string deptName) { //设置序列化时的对中文的编码方式 JsonSerializerOptions options = new JsonSerializerOptions { Encoder = JavaScriptEncoder.Create(UnicodeRanges.All), }; List<TLog> logList = GenerateLog(); //初始化包含2条日志信息的列表 //先找出要更改的实体 TDept dept = _context.TDepts.Find(deptId); //将更改前的数据序列化成json后记录下来 logList[0].TableData = JsonSerializer.Serialize<TDept>(dept, options); //给要更改的属性赋值 dept.DeptName = deptName; dept.ModifyTime = DateTime.Now; //将更改后的数据序列化成json后记录下来 logList[1].TableData = JsonSerializer.Serialize<TDept>(dept, options); //保存数据到t_log表 _context.TLogs.AddRange(logList); //将更改保存到数据库 _context.SaveChanges(); } /// <summary> /// 将更改前和更改后的数据保存到t_log表 /// </summary> /// <returns></returns> private List<TLog> GenerateLog() { string batchNo = Guid.NewGuid().ToString(); TLog beforeLog = new TLog { UserId = 6, UserName = "赵六", BatchNo = batchNo, TableName = "t_dept", TableData = "", LogTime = DateTime.Now }; TLog afterLog = new TLog { UserId = 6, UserName = "赵六", BatchNo = batchNo, TableName = "t_dept", TableData = "", LogTime = DateTime.Now }; List<TLog> logList = new List<TLog>(); logList.Add(beforeLog); logList.Add(afterLog); return logList; }

 

上一篇:MySQL学习笔记


下一篇:复合(组合)索引失效的几种情况总结