重邮项目的发布公告分为三个部分,第一部分是显示页面,第二部分是新增修改页面,第三部分是详情页面。发布公告属于重邮项目中比较复杂的一个部分了。

<div class="container-fluid">
        <!--查询条件-->
        <div class="row">
            <div class="col-sm-8">
                <form action="/" method="post">
                    <div class="form-row">
                        <label class="col-sm-1 col-form-label text-center">标题</label>
                        <div class="col-sm-3 px-0">
                            <input id="SNoticeName" class="form-control" type="text" name="title" value="" />
                        </div>
                        <label class="col-sm-1 col-form-label text-center">发布时间</label>
                        <div class="col-sm-3 px-0">
                            <input id="SReleaseTime" class="form-control" type="date" name="name" value="" />
                        </div>
                        <label class="col-sm-1 col-form-label text-center">公告类型</label>
                        <div class="col-sm-3 px-0">
                            <select class="form-control" id="sltNoticeType">
                                <option value="0">----请选择----</option>
                            </select>
                        </div>
                    </div>
                </form>
            </div>
            <div class="col-sm-4">
                <button class="btn btn-outline-secondary" onclick="tabNoticeSearch()">组合查询</button>
                <button class="btn btn-outline-secondary" id="Insert">发布公告</button>
                <button class="btn btn-outline-secondary" id="baseInfor">基础数据维护</button>
            </div>
        </div>
        <!--table 表格-->
        <table id="tabNotice" lay-filter="tabNotice"></table>
        <div class="h4">附件信息</div>
        <table id="tabFiles" lay-filter="tabFiles"></table>
    </div>

这是基础的HTML布局,发布公告需要使用到bootstrap框架,layui框架,jquery插件,最好自定义一个下拉框查询的方法,因为后期基本每个小项目都需要使用到下拉框查询,和一个jQuery根据json对象填充from表单的方法,还有身份证验证方法。

//为下来框添加选项
function appendOption(id, url) {
    $.getJSON(url, function (data) {
        $("#" + id).empty();
        $("#" + id).append("<option value=" + 0 + ">" + "----请选择----" + "</option>");
        //console.log(data);
        $.each(data, function (i) {
            $("#" + id).append("<option value=" + data[i].id + ">" + data[i].text + "</option>");
        });
    });
}
/**
 * jquery 验证身份证合法性的js
 *分别对15和18位的身份证号进行验证,非常严格。
 * @param value 身份证号
 */
function idCardNo(value) {
    //验证身份证号方法
    var area = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江", 31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北", 43: "湖南", 44: "广东", 45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "xinjiang", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外" }
    var idcard, Y, JYM;
    var idcard = value;
    var S, M;
    var idcard_array = new Array();
    idcard_array = idcard.split("");
    if (area[parseInt(idcard.substr(0, 2))] == null) return false;
    switch (idcard.length) {
        case 15:
            if ((parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0 || ((parseInt(idcard.substr(6, 2)) + 1900) % 100 == 0 && (parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0)) {
                ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/; //测试出生日期的合法性
            }
            else {
                ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/; //测试出生日期的合法性
            }
            if (ereg.test(idcard))
                //return Errors[0];
                var res = true;
            else
                //return Errors[2];
                var res = false;
            return res;
            break;
        case 18:
            if (parseInt(idcard.substr(6, 4)) % 4 == 0 || (parseInt(idcard.substr(6, 4)) % 100 == 0 && parseInt(idcard.substr(6, 4)) % 4 == 0)) {
                ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/; //闰年出生日期的合法性正则表达式 
            } else {
                ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/; //平年出生日期的合法性正则表达式 
            }
            if (ereg.test(idcard)) { //测试出生日期的合法性 
                //计算校验位
                S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7 + (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9 + (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10 + (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 + (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 + (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 + (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2 + parseInt(idcard_array[7]) * 1 + parseInt(idcard_array[8]) * 6 + parseInt(idcard_array[9]) * 3;
                Y = S % 11;
                M = "F";
                JYM = "10X98765432";
                M = JYM.substr(Y, 1);//判断校验位 
                if (M == idcard_array[17])//检测ID的校验位
                    //return Errors[0];
                    var res = true;
                else
                    //return Errors[3];
                    var res = false;
            }
            else
                //return Errors[2];
                res = false;
            return res;
            break;
        default:
            res = false;
            return res;
            break;
    };
}

/**
 * jquery 根据json对象填充form表单
 * @author en
 * @param fromId form表单id
 * @param jsonDate json对象
 */
function loadDatatoForm(fromId, jsonDate) {
    var obj = jsonDate;
    var key, value, tagName, type, arr;
    for (x in obj) {//循环json对象
        key = x;
        value = obj[x];
        //$("[name='"+key+"'],[name='"+key+"[]']").each(function(){
        //更加form表单id 和 json对象中的key查找 表单控件
        $("#" + fromId + " [name='" + key + "'],#" + fromId + " [name='" + key + "[]']").each(function () {
            tagName = this.tagName;
            type = $(this).attr('type');
            if (tagName == 'INPUT') {
                if (type == 'radio') {
                    $(this).attr('checked', $(this).val() == value);
                } else if (type == 'checkbox') {
                    try {
                        //数组 "篮球,排球,羽毛球"
                        arr = value.split(',');
                        for (var i = 0; i < arr.length; i++) {
                            if ($(this).val() == arr[i]) {
                                $(this).attr('checked', true);
                                break;
                            }
                        }
                    } catch (e) {
                        //单个
                        $(this).attr('checked', value);
                    }
                } else {
                    $(this).val(value);
                }
            } else if (tagName == 'TEXTAREA') {
                $(this).val(value);
            } else if (tagName == 'SELECT') {
                //console.log($(this).hasClass("select2"));
                $(this).val(value);

            }
        });
    }
}

视图页面除了HTML布局还需要jQuery代码,对from表格进行渲染,赋予按钮点击跳转事件,自定义表格刷新,删除数据。

<script>
        //全局变量声明
        var tabNotice;//公告 table
        var tabFiles;//公告文件 table
        var layer, layuiTable;//保存layui模块以便全局使用
        $(function () {
            //公告管理 公告类型下拉框
            appendOption("sltNoticeType", "SelectNoticeType");
            //加载和初始化layui模块                  
            layer = layui.layer, layuiTable = layui.table;
            //公告table
            tabNotice = layuiTable.render({
                elem: "#tabNotice",//html table id
                data: [],
                cols: [[ //表头
                    { type: 'numbers', title: '序号', align: 'center' },//序号列,title设定标题名称
                    { field: 'NoticeName', title: '公告名称', align: 'center' },
                    { field: 'NoticeTypeName', title: '公告类别', align: 'center' },
                    { field: 'NoticeTypeDetailName', title: '公告类别明细', align: 'center' },
                    { field: 'Editor', title: '编辑者', align: 'center' },
                    { field: 'BrowsingTimes', title: '浏览次数', sort: true, align: 'center' },
                    { field: 'ReleaseTimeStr', title: '发布时间', sort: true, align: 'center' },// sort: true 从而对列开启排序功能
                    { title: '操作', templet: setOperate, width: 260, align: 'center', fixed: 'right' }//width: 160 指定宽度,align 指定对其方式
                ]],
                page: {
                    limit: 5,//指定每页显示的条数
                    limits: [5, 10, 15, 20, 25, 30, 35, 40, 45, 50],//每页条数的选择项
                }, //开启分页
            })
            //公告文件 table
            tabFiles = layuiTable.render({
                elem: "#tabFiles",//html table id
                data: [],
                //url: "/SystemManagement/IssuanceNotice/SelectFileByNoticeId",//数据接口
                cols: [[ //表头
                    { type: 'numbers', title: '序号' },//序号列,title设定标题名称
                    { field: 'FileID', title: '文件ID', hide: true },//hide:true 隐藏列
                    { field: 'NoticeName', title: '公告名称' },
                    { field: 'FileTypeName', title: '文件类型' },
                    { field: 'Files', title: '文件' }
                ]],
                page: {
                    limit: 5,//指定每页显示的条数
                    limits: [5, 10, 15, 20, 25, 30, 35, 40, 45, 50],//每页条数的选择项
                }, //开启分页
            });
            tabNoticeSearch();
            //公告 table 监听
            //监听行单击事件(单击事件为:rowDouble)
            layuiTable.on('row(tabNotice)', function (obj) {
                //console.log(obj)
                var data = obj.data;//获取点击行数据
                //标注选中样式
                obj.tr.addClass('layui-table-click').siblings().removeClass('layui-table-click');
                var noticeId = data.NoticeID;//公告id
                //公告查询附件
                tabFiles = layuiTable.reload('tabFiles', {
                    url: '/SystemManagement/IssuanceNotice/SelectFileByNoticeId',
                    page: {
                        curr: 1,
                    },
                    where: { //设定异步数据接口的额外参数,比如设置多条件查询的参数
                        noticeId: noticeId
                    }
                });

            })
        })
        //1.2自定义操作列
        function setOperate(data) {
            //用户类型id
            var noticeId = data.NoticeID;
            var btns = '<button type="button" class="layui-btn layui-btn-xs" onclick="openViewNotice(' + noticeId + ')">详情</button>';
            btns += '<button type="button" class="layui-btn layui-btn-xs" onclick=updateNotice(' + noticeId + ')>修改</button>';
            btns += '<button type="button" class="layui-btn layui-btn-xs layui-btn-danger" onclick=deleteNotice(' + noticeId + ')>删除</button>';
            return btns;
        }
        //1.3 组合查询
        function tabNoticeSearch() {
            //获取页面筛选内容
            var noticeName = $("#SNoticeName").val();
            var releaseTime = $("#SReleaseTime").val();
            var noticeTypeId = $("#sltNoticeType").val();
            if (noticeTypeId == undefined || noticeTypeId == "") {
                noticeTypeId = 0;
            }
            tabNotice = layuiTable.reload('tabNotice', {
                url: '/SystemManagement/IssuanceNotice/SelectNoticeAll',
                page: {
                    curr: 1,//重置到第一页
                },
                where: { //设定异步数据接口的额外参数,比如设置多条件查询的参数
                    noticeName: noticeName,
                    releaseTime: releaseTime,
                    noticeTypeId: noticeTypeId
                }
            });
            清空附件列表
            tabFiles = layuiTable.reload('tabFiles', {
                url: '',
                data: []
            });
        }
        //1.4 跳转到基础信息维护
        $("#baseInfor").click(function () {
            window.location.href = "/SystemManagement/IssuanceNotice/BaseInfor";//基础数据维护页面
        });
        //1.5 发布公告
        $("#Insert").click(function () {//新增点击事件
            window.location.href = "/SystemManagement/IssuanceNotice/InsertNotice";//新增公告页面
        });
        //1.6 跳转到修改页面 
        function updateNotice(noticeId) {
            window.location.href = "/SystemManagement/IssuanceNotice/UpdateNotice?noticeId=" + noticeId;//修改公告页面
        }
        //1.7 跳转到详情页面
        function openViewNotice(noticeId) {
            window.open("/SystemManagement/IssuanceNotice/NoticeDetailed?noticeId=" + noticeId);
        }
        //1.8 删除公告信息
        function deleteNotice(noticeId) {
            layer.confirm("您确定要删除该公告?", { title: '删除信息的提示', icon: 3, offset: '100px' }, function (index) {
                layer.close(index);
                $.post("DeleteNotice", { noticeId: noticeId}, function (msg) {
                    if (msg.State) {
                        tabNoticeSearch(); //公告表格查询:刷新表
                        tabFiles.clearGridBodyData(); //清空附件列表
                        tabFiles = layuiTable.reload('tabFiles', {
                            data: []
                        });
                    }
                    layer.alert(msg.Text);
                })
            });
        }

    </script>

你以为这就结束了吗?不,这才刚刚开始。上面说到有三个部分,也就是需要三个页面才能完成。除了基本的显示页面,还有两个隐藏的页面,一个是新增修改共用的模态框页面,一个是详情的显示页面。

接下来就是新增修改共用的HTML代码。两个方法使用同一个模态窗体

<div class="container card">
        <div class="row">
            <div class="col">
                <form id="fromNotice" action="" method="post" enctype="multipart/form-data">
                    <div class="form-row">
                        <label class="col-sm-2 col-form-label">公告类别:</label>
                        <div class="col-sm-4">
                            <select class="form-control" id="sltNoticeType">
                                <option value="0">----请选择----</option>
                            </select>
                        </div>
                        <label class="col-sm-2 col-form-label pl-4">类型明细:</label>
                        <div class="col-sm-4">
                            <select class="form-control" id="sltNoticeTypeDetail">
                                <option value="0">----请选择----</option>
                            </select>
                        </div>
                    </div>
                    <div class="form-row">
                        <label class="col-sm-2 col-form-label">“New”显示天数:</label>
                        <div class="col-sm-4">
                            <select class="form-control" id="selectNew">
                                <!--ASP.NET Razor - 标记
                                    Razor 是一种允许您向网页中
                                    嵌入基于服务器的代码(Visual Basic 和 C#)的标记语法。
                                 -->
                                <option value="0">----请选择----</option>
                                @for (int i = 1; i < 10; i++)
                                {
                                    <option value="@i">@i</option>
                                }
                            </select>
                        </div>
                        <div class="col-sm-6 pl-4">
                            <div class="custom-control custom-checkbox">
                                <input type="checkbox" class="custom-control-input" id="Overhead" name="Overhead">
                                <label class="custom-control-label" for="Overhead">是否把该公告置于主界面公告列表的顶部</label>
                            </div>
                        </div>
                    </div>
                    <div class="form-row">
                        <div class="col-sm-6">
                            <div class="custom-control custom-checkbox">
                                <input type="checkbox" class="custom-control-input" id="cNoticeCarousel" name="noticeCarousel">
                                <label class="custom-control-label" for="cNoticeCarousel">是否把该公告添加到主界面的轮播中</label>
                            </div>
                        </div>
                        <div class="col-sm-6 pl-4">
                            <div class="collapse" id="collapseOverhead" style="">
                                <div class="well">
                                    <img id="NoticeCarousePicture" style="max-width: 274px; max-height: 153px;" ondblclick="showImageFile()">
                                    <input type="file" id="NoticeCarouseImage" name="noticeCarouseImage" class="hidden" accept="image/jpeg,image/png,image/jpg,image/gif,image/bmp" onchange="loadImgToEimg()">
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="form-row">
                        <label class="col-sm-2 col-form-label">通知标题:</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" name="NoticeName" value="" />
                        </div>
                    </div>
                    <div class="form-row">
                        <label class="col-sm-12 col-form-label">通知正文:</label>
                        <div class="col-sm-12">
                            <div class="noticeContent">
                                <textarea id="NoticeContent" name="NoticeContent" class="form-control"></textarea>
                            </div>
                        </div>
                    </div>
                    <div class="form-row justify-content-between">
                        <label class="col-sm-2 col-form-label">附件:</label>
                        <div class="col-sm-2">
                            <button class="btn btn-primary btn-sm" type="button" onclick="openUpAttachmentFile()">添加附件</button>
                        </div>
                    </div>
                    <div class="form-row">
                        <div class="col-sm-12">
                            <table id="tabFiles" lay-filter="tabFiles"></table>
                        </div>
                    </div>
                    <div class="form-row justify-content-center">
                        <button class="btn btn-primary mr-3" type="button" id="saveForm">发布</button>
                        <button class="btn btn-secondary" type="button" id="quit">返回</button>
                    </div>
                </form>
            </div>
        </div>
    </div>
    @*文件上传表单*@
    <div style="display: none" >
        <form id="frmUploadAttachment" action="/SystemManagement/IssuanceNotice/UploadAttachment" method="post" enctype="multipart/form-data">
            <input type="file" name="attachmentFile" id="getAttachmentFile" class="form-control" onchange="upAttachmentFile()" />
        </form>
    </div>

以及JavaScript代码,这次的新增修改与往期不同的是,这次多了一个富文本框和附件的添加,所以代码量会比往期多。这也是为什么需要使用三个视图的原因,使用三个视图可以让代码更为简洁。

<script>
        var editorNotice;//富文本编辑器
        var tabFiles;//附件表格
        var layer, layuiTable;//保存layui模块以便全局使用
        var layerIndex;
        $(document).ready(function () {
            //1.0 初始化 ckeditor富文本编辑器
            editorNotice = CKEDITOR.replace('NoticeContent');
            //1.1 新增公告->公告类型
            appendOption("sltNoticeType", "SelectNoticeType");
            //1.4 初始化 附件表格
            layui.use(['table', 'layer'], function () {
                layer = layui.layer, layuiTable = layui.table;
                tabFiles = layuiTable.render({
                    elem: "#tabFiles",//html table id 
                    data: [],
                    cols: [[ //表头
                        { type: 'numbers', title: '序号' },//序号列,title设定标题名称
                        { title: '文件类型', field: 'FileTypeName' },
                        { title: '文件', field: 'Files' },
                        { title: '文件名称', field: 'FileName' },
                        { title: '操作', templet: setRemoveButton, width: 160, align: 'center', fixed: 'right' }//width: 160 指定宽度,align 指定对其方式
                    ]],
                    page: {
                        limit: 10,//指定每页显示的条数
                        limits: [5, 10, 15, 20, 25, 30, 35, 40, 45, 50],//每页条数的选择项
                    } //开启分页
                });
            });
        })
        //1.2 公告类型值改变事件
        $("#sltNoticeType").change(function () {
            var NoticeTypeID = $(this).val();
            appendOption("sltNoticeTypeDetail", "SelectNoticeDetailByID?NoticeTypeID=" + NoticeTypeID);
        });
        //1.3 轮播图片控制
        //初始化轮播图片选择collapse
        $("#collapseOverhead").collapse({ toggle: false });
        //当用户选择显示在轮播时显示 collapse
        $("#cNoticeCarousel").change(function () {
            //判断选中
            if (document.getElementById("cNoticeCarousel").checked) {
                //显示DIV
                $("#collapseOverhead").collapse('show');
            } else {
                //隐藏DIV
                $("#collapseOverhead").collapse('hide');
            }
        });
        //1.4 移除附件 自定义按钮
        function setRemoveButton(data) {
            //console.log(data)
            var fileGuid = data.FileGuid;
            return '<button type="button" class="layui-btn layui-btn-xs layui-btn-danger" onclick=removeAttachmentFile("' + fileGuid + '")>移除</button>';
            //return '<button type="button" class="layui-btn layui-btn-xs layui-btn-danger" onclick="removeAttachmentFile("' + fileGuid+'")" >移除</button>';
        }
        //1.5 主页面轮播图片 将选择的图片文件显示到轮播图片上
        //文件读取
        //图片文件 正则表达式过滤image/jpeg,image/png,image/jpg,image/gif,image/bmp
        //?:匹配冒号后的内容但是不获取匹配结果;不进行储存供以后使用,可以提高匹配速度
        //http://c.biancheng.net/view/5632.html 博文 js正则
        var imgReader = new FileReader();
        regexImageFilter = /^(?:image\/bmp|image\/gif|image\/jpg|image\/jpeg|image\/png)$/i;
        function loadImgToEimg() {
            //选取选择图片
            var imgfFile = $("#NoticeCarouseImage").get(0).files[0];
            //console.log(imgfFile)
            //加载image标签中
            if (!regexImageFilter.test(imgfFile.type)) {
                alert("选择的不是一个有效的图片文件");
            }
            imgReader.readAsDataURL(imgfFile)

        }
        //文件读取 onload事件
        imgReader.onload = function (e) {
            $("#NoticeCarousePicture").attr("src", e.target.result)
            //console.log(e.target.result)
        }

        //1.6 添加附件按钮点击事件
        function openUpAttachmentFile() {
            $("#getAttachmentFile").click();
        }
        //1.7 附件上传
        function upAttachmentFile() {
            var fileValue = $('#getAttachmentFile').val();
            //避免上传成  功后去掉value 时再次触发上传
            if (fileValue == "" || fileValue == undefined) {
                return;
            }
            //获取选择的文件
            var files = $('#getAttachmentFile').prop("files");
            //判断
            if (files.length > 0) {
                if (files[0].size <= 20 * 1024 * 1024) {
                    $("#frmUploadAttachment").ajaxSubmit(function (msg) {
                        if (msg.State) {
                            tabFilesRefresh();//刷新附件信息
                        }
                        layer.alert(msg.Text, { icon: 3, offset: '150px;' });
                        $('#getAttachmentFile').val("");
                    })
                } else {
                    layer.alert("文件大小不能超过20M", { icon: 0 });
                }
            } else {
                layer.alert("请选择要上的文件", { icon: 0 });
            }
        }
         //1.8 session中查询附件信息
        function tabFilesRefresh() {
            tabFiles = layuiTable.reload("tabFiles", {
                page: { curr: 1 },
                url: "/SystemManagement/IssuanceNotice/SelectSessionFiles",
            });
        }
        //1.9 删除附件信息
        function removeAttachmentFile(fileGuid) {
            //alert(fileGuid);
            layer.confirm(" 您确定要移除该文件?", { icon: 3, titile: "提示" }, function (index) {
                layer.close(index);
                $.post("RemoveAttachmentFile?fileGuid=" + fileGuid, function (message) {
                    if (message.State) {
                        //刷新附件列表
                        tabFilesRefresh();
                    }
                    layer.alert(message.Text);
                });
            });
        }
        //1.10 保存公告
        $("#saveForm").click(function () {
            var layerIndex;
            var NoticeTypeDetailID = $("#sltNoticeTypeDetail").val();
            var NoticeName = $('#fromNotice input[name="NoticeName"]').val();
            var NoticeContent = editorNotice.getData();
            var Overhead = $('#Overhead').prop('checked');
            var New = $('#selectNew').val();
            var noticeCarousel = $('#cNoticeCarousel').prop('checked');
            if (NoticeTypeDetailID != "" && NoticeName != "" && NoticeContent != "") {
                if (noticeCarousel == true && $('#fromNotice input[name="noticeCarouseImage"]').prop('files').length == 0) {
                    layer.alert("如要添加到轮播显示,请上传图片", { icon: 0 });
                    return;
                }
                console.log(NoticeContent)
                var fd = new FormData();
                fd.append("NoticeTypeDetailID", NoticeTypeDetailID);//公告类型ID
                fd.append("NoticeName", NoticeName);//公告名称
                fd.append("NoticeContent", NoticeContent);//公告内容
                fd.append("Overhead", Overhead);//置顶显示
                fd.append("New", New);//New显示天数
                fd.append("noticeCarousel", noticeCarousel);//是否轮播
                fd.append("noticeCarouseImage", $('#fromNotice input[name="noticeCarouseImage"]').prop('files')[0]);//文件添加到FormData

                var xhr = new XMLHttpRequest();
                xhr.open("POST", "InsertNoticeInfor");
                xhr.send(fd);
                xhr.onreadystatechange = function () {
                    if (xhr.readyState == 4 && xhr.status == 200) {
                        //xhr.responseText string
                        var txt = JSON.parse(xhr.responseText);
                        //console.log(txt);
                        if (txt.State) {
                            window.location.href = "/SystemManagement/IssuanceNotice/Index";
                        }
                        layer.alert(txt.Text, { icon: 2 });
                    }
                }
            } else {
                layer.alert("请填写完整", { icon: 0 });
            }

        })
    </script>

完成新增修改的代码后还有详情页面的代码,详情页面没有JS代码,主要由HTML代码组成,以及一小部分CSS代码尽心修饰。

<div class="container">
        <div class="row mt-3">
            <div class="col-auto">
                <img src="~/Content/images/Logo2.png" />
            </div>
        </div>
        <div class="row">
            <div class="col-12">
                @{
                    NoticeVo notice = ViewBag.notice;
                }
                <div class="heading">
                    <span id="title">@notice.NoticeName</span>
                </div>
                <div>
                    <span id="time">发布时间:@notice.ReleaseTimeStr</span>
                    <span id="noticeType" class="float-right">公告类型:@notice.NoticeTypeName</span>
                </div>
                <hr class="m-1" />
                <div id="content">
                    <!--Html.Raw() 方法输出带有html标签的字符串-->
                    @Html.Raw(notice.NoticeContent)
                </div>
                <hr class="m-1" />
                <div class="row next">
                    <h4>附件:</h4>
                    @foreach (FilesVo file in ViewBag.files)
                    {
                        <div class="col-md-12">
                            <!--Html.Raw() 方法输出带有html标签的字符串-->
                            @Html.Raw(file.Files)
                        </div>
                    }
                </div>
            </div>
        </div>

        <footer class="footer text-center mt-4">
            2021年广信IT学院
        </footer>
    </div>

 下面是(发布公告)详情页面的CSS代码,主要用于修饰网页。

.heading {
            font-size: 24px;
            text-align: center;
            color: #337ab7;
        }

        hr {
            border-bottom: 3px solid red;
        }

        .next {
            padding: 30px 15px 0 15px;
            font-size: 16px;
        }

下期我们在聊控制器中的代码。