开源博客项目Blog .NET Core源码学习(25:App.Hosting项目结构分析-13)
本文学习并分析App.Hosting项目中后台管理页面的文章管理页面。
文章管理页面用于显示、检索、新建、编辑、删除文章数据,以便在前台页面的首页、文章专栏、文章详情页面显示文章数据。文章管理页面附带一新建及编辑页面,以支撑新建和编辑文章数据。整个页面使用了layui中的表格、表单、上传组件、KindEditor组件、日期与时间选择、formSelects组件(参考文献3)等样式或模块,并未使用独立的js文件,而是直接在页面内嵌js代码,并调用BlogManage/ArticleController的相关函数处理数据。

文章管理页面的上半部分显示搜索框,下半部分以表格形式显示全部文章数据或者检索结果。

内置的js代码主要用于设置表格样式及处理事件,同时处理搜索事件。调用layui的table.render函数设置表格样式,主要包括:
1)用elem属性设置表格容器元素,同时用url设置调用BlogManage/ArticleController的Index函数分页获取所有文章数据;
2)用limit、limits、page属性设置数据分页显示;
3)用toolbar属性设置头部工具栏,指定的元素id定义在_AminLayout.cshtml内,且根据不同的页面显示不同的工具栏内容,在本页面中工具栏中有添加按钮(按钮在系统管理->按钮管理中配置);
4)用where属性设置调用Index时附加的其它参数;
5)用cols属性设置表格显示列,其中第一列采用type:‘number’设置为序号列,标题列(对应字段Title)、来源列(对应字段Source)、是否显示列(对应字段Visible)、是否置顶列(对应字段IsTop)采用templet属性以模版函数方式设置显示样式,其它列对应Index函数返回值的属性,最后一列用templet属性以模版选择器形式指定_AminLayout.cshtml文件中定义的按钮模版(按钮在系统管理->按钮管理中配置)。

除上述设置之外,还定义了工具栏、操作按钮、检索按钮的响应函数,其余的添加、编辑和删除按钮中,删除按钮的事件处理函数逻辑为调用BlogManage/ArticleController的Delete函数删除数据,然后使用table.reload重载页面数据。

调用form.on('switch(enabled)'设置表格中是否显示列开关事件的事件处理函数,其内部调用tools.submitConfrim函数提示用户是否在显示和隐藏间切换,确定的话则调用BlogManage /ArticleController的Show函数更新显示状态,同时更新页面数据,取消的话则还原是否显示列之前的显示值。
调用form.on('switch(top)'设置表格中是否置顶列开关事件的事件处理函数,其内部调用tools.submitConfrim函数提示用户是否在置顶和取消置顶间切换,确定的话则调用BlogManage /ArticleController的Top函数更新置顶状态,同时更新页面数据,取消的话则还原是否置顶列之前的显示值。

新建和编辑文章数据使用的同一页面,位置为BlogManage\Views\Article\Form.cshtml页面,使用layui的表单组件设置样式。如果是新建文章,则直接弹出页面编辑文章数据,而编辑数据的话,主页面会通过url传递key参数,在编辑页面中调用BlogManage/ArticleController的Detail函数获取文章数据初始化编辑页面的对应元素数据。新建或编辑完成后,主页面的js中设置了回调函数,最终调用BlogManage/ArticleController的Form函数新增或更新数据。

如上图所示,采用layui的栅格布局将新建或编辑文章页面划分为左右两栏,左侧上半部分维护文章标题及摘要,同时调用BlogManage/ArticleController的Thumbnail函数上传文章缩略图,下半部分使用富文本编辑器KindEditor编辑文章正文,并在Form.cshtml调用KindEditor.ready初始化富文本编辑器设置,右侧从上向下维护文章属性,调用BlogManage/CategoryController的List函数和BlogManage/ TagsController的List函数初始化栏目和标签下拉复选框。文章还能设置定时发布,不过暂时没有看出来处理逻辑。

参考文献:
[1]https://gitee.com/miss_you/Blog
[2]https://layui.dev/docs/2/
[3]https://github.com/hnzzmsf/layui-formSelects
相关文章:
开源博客项目Blog .NET Core源码学习(25:App.Hosting项目结构分析-13)
本文学习并分析App.Hosting项目中后台管理页面的文章管理页面。 文章管理页面用于显示、检索、新建、编辑、删除文章数据,以便在前台页面的首页、文章专栏、文章详情页面显示文章数据。文章管理页面附带一新建及编辑页面,以支撑新建和编辑文章数据。…...
第七节 ConfigurationClassParser 源码分析
tips: ConfigurationClassParser 是 Springframework 中的重要类。 本章主要是源码理解,有难度和深度,也枯燥乏味,可以根据实际情况选择阅读。 位置:org.springframework.context.annotation.ConfigurationClassPars…...
零基础代码随想录【Day42】|| 1049. 最后一块石头的重量 II,494. 目标和,474.一和零
目录 DAY42 1049.最后一块石头的重量II 解题思路&代码 494.目标和 解题思路&代码 474.一和零 解题思路&代码 DAY42 1049.最后一块石头的重量II 力扣题目链接(opens new window) 题目难度:中等 有一堆石头,每块石头的重量都是正整…...
2024-5-24 石群电路-15
2024-5-24,星期五,22:15,天气:晴,心情:晴。今天最后一天上班,终于要放返校假啦,开心!!!!!!不过放假也不能耽误…...
功能测试:核心原理、挑战以及解决之道
在软件开发生命周期中,功能测试占据了至关重要的位置。它是确保软件应用按照既定的要求和规格运行的关键测试阶段。功能测试的目的在于验证软件的功能、行为和用户界面等是否达到了业务需求的标准。本文将深入探讨功能测试的概念,执行过程中可能遇到的挑…...
跨境电商赛道,云手机到底能不能化繁为简?
当下国内电商背景: 从零售额的数据来看:随着互联网的普及和消费者购物习惯的改变,国内电商市场规模持续扩大。据相关数据显示,网络消费亮点纷呈,一季度全国网上零售额达到了3.3万亿元,同比增长12.4%。这表…...
linux:信号深入理解
文章目录 1.信号的概念1.1基本概念1.2信号的处理基本概念1.3信号的发送与保存基本概念 2.信号的产生2.1信号产生的五种方式2.2信号遗留问题(core,temp等) 3.信号的保存3.1 信号阻塞3.2 信号特有类型 sigset_t3.3 信号集操作函数3.4 信号集操作函数的使用 4.信号的处理4.1 信号的…...
Android系统的/etc/mkshrc文件
/etc/mkshrc 文件是用于配置 mksh(MirBSD Korn Shell)环境的启动脚本。mksh 是 Android 默认使用的 shell,在 shell 启动时会读取并执行这个文件中的配置。以下是关于 /etc/mkshrc 文件的详细信息及其用途。 /etc/mkshrc 文件的作用 环境配…...
LeetCode199二叉树的右视图
题目描述 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 解析 这一题的关键其实就是找到怎么去得到当前是哪一层级,可以利用队列对二叉树进行层次遍历,但…...
JavaScript 基础
一 JavaScript 的书写形式 1.1 行内式 <input type"button" value"点我一下" onclick"alert(hello akai);" > 注意,JS 中的字符串常量可以用单引号表示,也可以使用双引号表示.HTML 中推荐使用双引号,JS 中推荐使用单引号(使用双引号容易…...
DOS学习-目录与文件应用操作经典案例-type
新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 1. 查看文本文件内容 2. 同时查看多个文本文件内容 3. 合并文…...
QT教程-一,初识QT
目录 一,QT是什么?能够使用它做什么? 二,Qt 能够使用的语言 三,Qt主要用于什么领域? 四,Qt开发的软件 一,QT是什么?能够使用它做什么? Qt是一个跨平台的 C 开发库,主…...
SpringBoot搭建Eureka注册中心
系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 1、Spring-Cloud Euraka介绍 Spring-Cloud Euraka是Spring Cloud集合中一…...
day 38 435.无重叠区间 763.划分字母区间 56. 合并区间 738.单调递增的数字 968.监控二叉树
435.无重叠区间 思路 为了使区间尽可能的重叠所以排序来使区间尽量的重叠,使用左边界排序来统计重叠区间的个数与452. 用最少数量的箭引爆气球恰好相反。 代码 class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(a,…...
ssm/springoot养老院问诊服务预约系统_96316老年人服务系统
2.管理员: (1)登入注册页面:管理员进行操作时需要是已注册登入的 (2)权限管理:管理员登入后可以运用权限进行相应的操作管理。 (3)用户管理:对用户进行删除、…...
WordPress插件优化对提升性能有多大影响?
WordPress插件优化对提升性能的影响可以是非常显著的。插件是WordPress平台的一个重要组成部分,它们可以增强网站的功能和定制性。然而,如果插件没有经过优化,它们可能会成为网站性能的瓶颈。 通过优化插件,可以减少对服务器资源…...
Servlet的response对象
目录 HTTP响应报文协议 reponse继承体系 reponse的方法 响应行 public void setStatus(int sc) 响应头 public void setHeader(String name, String value) 响应体 public java.io.PrintWriter getWriter() public ServletOutputStream getOutputStream() 请求重定…...
Unity射击游戏开发教程:(20)增加护盾强度
在本文中,我们将增强护盾,使其在受到超过 1 次攻击后才会被禁用。 Player 脚本具有 Shield PowerUp 方法,我们需要调整盾牌在被摧毁之前可以承受的数量,因此我们将声明一个 int 变量来设置盾牌可以承受的击中数量。...
初识C语言——第二十八天
代码练习1: 用函数的方式实现9*9乘法表 void print_table(int n) {int i 0;int j 0;for (i 1; i< n; i){for (j 1; j< i; j){printf("%d*%d%-3d ", i, j, i * j);}printf("\n");}}int main() {int n 0;scanf("%d", &a…...
Android NDK系列(三)输入事件分发到Native层的流程
在Android NDK系列(一)手动搭建Native Project 创建的Native工程中,是可以接收输入事件的,只需在android_main中注册输入事件的处理函数,当触摸屏幕后,handleInputEvent函数便会调用,代码如下。 static int32_t handleInputEvent(struct android_app* app, AInputEvent…...
【数据结构与算法】二叉树从建立开始
为什么你学了二叉树却还是不会做题?从“建树”到“解题”的完整思维体系在学习数据结构的过程中,二叉树几乎是每个人都会接触的内容。但一个很现实的问题是:很多人会写遍历,却不会做题。表面上看是代码能力的问题,实际…...
MS5611高精度气压温度传感器Arduino驱动库
1. 项目概述MS5611-Mike-Refactored 是一款面向嵌入式平台(特别是 Arduino 兼容生态)的 MS5611 高精度气压/温度传感器驱动库。该库并非简单封装,而是对 Korneliusz Jarzebski 原始实现的一次系统性重构与工程化增强。其核心目标是将一个基础…...
Arduino嵌入式轻量日志库SimpleLogger设计与实践
1. 项目概述SimpleLogger 是一款专为 Arduino 平台设计的轻量级日志库,其核心设计哲学是“极简可用、零侵入、低资源占用”。在资源受限的微控制器(如 ATmega328P、ESP32-S2、nRF52840 等)上,传统日志框架(如 ArduinoL…...
Serverless测试噩梦:冷启动延迟搞垮电商大促
一场被“隐形杀手”击溃的战役凌晨两点,某头部电商平台的“双十一”大促作战指挥中心。流量曲线在预热阶段平稳爬升,技术团队信心满满——所有核心交易链路都已迁移至先进的Serverless架构,理论上具备无限弹性。然而,零点的钟声敲…...
智能音乐情绪生成器:当AI遇见音乐,用代码谱写情感旋律
引言:音乐与情感的数字化探索音乐是人类情感最直接的表达方式之一,欢快的旋律让人振奋,悲伤的曲调令人沉思。在人工智能时代,我们能否让机器理解情感,并创作出符合特定情绪的音乐?本文将带你走进一个融合了…...
英飞凌TC3XX时钟系统实战:从PLL配置到CCU分频的避坑指南
英飞凌TC3XX时钟系统实战:从PLL配置到CCU分频的避坑指南 在嵌入式系统开发中,时钟系统如同人体的神经系统,为整个芯片提供精准的时序控制和同步信号。作为英飞凌AURIX™系列中的旗舰产品,TC3XX微控制器凭借其高度可配置的时钟架构…...
目标跟踪模型在LaSOT上表现不佳?可能是这14个属性在‘捣鬼’——深度属性分析指南
LaSOT目标跟踪性能优化:14种挑战属性的深度解析与实战应对 当你的目标跟踪模型在LaSOT基准测试中表现不如预期时,问题可能隐藏在数据集精心设计的14种挑战属性中。这些属性不是简单的标签,而是揭示了模型在不同复杂场景下的真实能力边界。本文…...
深度解析OpenSpeedy:3大核心技术原理与实战应用指南
深度解析OpenSpeedy:3大核心技术原理与实战应用指南 【免费下载链接】OpenSpeedy 🎮 An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy OpenSpeedy是一款高效的开源游戏加速工具,通过创新…...
解决Swagger2集成中v2/api-docs接口404问题的关键:正确配置Docket分组
1. 为什么访问v2/api-docs会返回404? 这个问题困扰过不少开发者。当你兴冲冲地集成完Swagger2,打开swagger-ui.html页面,却发现页面一片空白,控制台报错显示v2/api-docs接口返回404。更让人抓狂的是,单独访问这个接口时…...
解决AMD显卡CUDA兼容性问题:ZLUDA技术实现与应用指南
解决AMD显卡CUDA兼容性问题:ZLUDA技术实现与应用指南 【免费下载链接】ZLUDA CUDA on AMD GPUs 项目地址: https://gitcode.com/gh_mirrors/zlu/ZLUDA 一、问题:AMD显卡的CUDA生态困境 1.1 硬件与软件的生态鸿沟 CUDA作为NVIDIA构建的专有计算平…...
