本篇实现新增和修改的功能。
在部门列表页增加一个新增按钮,用户点击后弹出一个新增部门的页面 DeptEdit.cshtml,
考虑到修改部门信息的时候可以复用此页面,故在新增的时候传递一个参数 deptid=0,
在列表页每行的末尾增加一个修改按钮,点击的时候调用 DeptEdit.cshtml 页面并传值 deptid=xxx,
这样在DeptEdit.cshtml 页可以通过判断是否 deptid>0 来决定页面是做新增还是修改的操作,列表页的效果如下:
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> <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> @Model.SubjectName</td> </tr> <tr style="height:30px;border:solid 1px #c0c0c0;"> <td style="font-size:15px;"> 部门名称: <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> <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; } } } } }
运行页面,点新增时画面如下:
点修改时画面如下:
当用户输入部门名称后点"保存"按钮,代码如下:
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; }