• ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(8)之文章管理


        到这一步,我们整个项目的核心搭建已经算是完成了,接下来就是我们业务功能的实际应用,也就是表现层的设计和实现,如果你是一个项目负责人,到这一步,接下来的工作就可以交给下面的兄弟去完成了,在这里我们用文章管理来详细的讲解一下应用层的搭建、以及数据的加载和分页等。

        一、创建控制器和视图

        我们在区域BackstageModule下的Controllers文件夹中创建一个名叫ArticleMangeController的控制器,然后通过控制器添视图(Index.cshtml,Form.cshtml),并让其继承PublicController公共控制器,然后我们在ArticleMangeController控制器中创建视图中所需要的方法(数据查询、添加修改、删除),以及业务层(Com_ArticleBll.cs)的业务方法(为了规范,我们尽量把方法写在对应的业务中)。

        (1)ArticleMangeController文章控制器

    using Bobo.Utilities;
    using IA.Business;
    using IA.Entity;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.IO;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace IA.WebApp.Areas.BackstageModule.Controllers
    {
        /// <summary>
        /// 文章管理控制器
        /// </summary>
            public class ArticleMangeController : PublicController<Com_Article>
            {
                //
                // GET: /BackstageModule/ArticleMange/
    
                /// <summary>
                /// 获取分页数据
                /// </summary>
                /// <param name="ArticleTitle"></param>
                /// <param name="jgp"></param>
                /// <returns></returns>
    
                public ActionResult GetTable(string ArticleTitle, string ArticleType, JqGridParam jgp)
                {
                    ArticleTitle = ArticleTitle.Replace("&nbsp;", "");
                    ArticleType = ArticleType.Replace("&nbsp;", "");
                    Com_ArticleBll bll = new Com_ArticleBll();
                    DataTable model = bll.GetTablePage(ArticleTitle, ArticleType, ref jgp);
                    //构建分页数据
                    var JsonData = new
                    {
                        success = true,
                        pageData = jgp,
                        message = "",
                        data = model
                    };
                    return Content(JsonData.ToJson());
                }
                /// <summary>
                /// 提交表单
                /// </summary>
                /// <param name="entity"></param>
                /// <param name="KeyValue"></param>
                /// <returns></returns>
                [HttpPost]
                [ValidateInput(false)]
    
                public ActionResult SubmitFormData(Com_Article entity, string KeyValue)
                {
                    HttpPostedFileBase PicFile = Request.Files["PicUrl"];
                    Com_ArticleBll bll = new Com_ArticleBll();
                    try
                    {
                        int IsOk = 0;
                        string Message = KeyValue == "" ? "新增成功。" : "编辑成功。";
                        #region 题图处理
                        bool PicHasFile = PicFile != null && PicFile.ContentLength > 0;
    
                        List<string> fileType = ConfigHelper.GetSystemConfig("SystemConfig", "fileUploadPath", "ImageType").ToLower().Split('|').ToList();
                        string PicName = "";
                        if (PicHasFile)
                        {
                            PicName = Path.GetFileName(PicFile.FileName);
                        }
                        if (PicHasFile && !fileType.Contains(Path.GetExtension(PicName).ToLower()))
                        {
                            return Content(new JsonMessage { Code = "-1", Success = false, Message = "题图只能上传" + ConfigHelper.GetSystemConfig("SystemConfig", "fileUploadPath", "ImageType").ToLower() + "类型的文件!" }.ToString());
                        }
                        if (PicHasFile && CommonHelper.GetInt(SizeHelper.CountSizeNum(PicFile.ContentLength)) > CommonHelper.GetInt(ConfigHelper.GetSystemConfig("SystemConfig", "fileUploadPath", "ImageSize")))
                        {
                            return Content(new JsonMessage { Code = "-1", Success = false, Message = "文件大小不能超过" + ConfigHelper.GetSystemConfig("SystemConfig", "fileUploadPath", "ImageSize") + "M!" }.ToString());
                        }
                        string PicPath = "/Resource/Article/TitleImage/";
                        string FilePath = DirFileHelper.WebPathTran(PicPath);
                        DirFileHelper.CreateDirectory(FilePath);
    
                       
                        if (PicFile != null && PicFile.ContentLength > 0)
                        {
                            string NewFileName = CommonHelper.GetGuidNotLine() + PicName;
                            PicFile.SaveAs(FilePath + NewFileName);
                            entity.PicUrl = PicPath + NewFileName;
    
                        }
                        #endregion
                        if (!string.IsNullOrEmpty(KeyValue))
                        {
                            Com_Article Oldentity = bll.Factory.FindEntity(KeyValue);//获取没更新之前实体对象
                            entity.Modify(KeyValue);
                            IsOk = bll.Factory.Update(entity);
                            this.WriteLog(IsOk, entity, Oldentity, KeyValue, Message);
                        }
                        else
                        {
                            entity.Create(false);//登录功能做好改为true
                            IsOk = bll.Factory.Insert(entity);
                            this.WriteLog(IsOk, entity, null, KeyValue, Message);
                        }
                        return Content(new JsonMessage { Success = true, Code = IsOk.ToString(), Message = Message }.ToString());
                    }
                    catch (Exception ex)
                    {
                        this.WriteLog(-1, entity, null, KeyValue, "操作失败:" + ex.Message);
                        return Content(new JsonMessage { Success = false, Code = "-1", Message = "操作失败:" + ex.Message }.ToString());
                    }
                }
                /// <summary>
                /// 假删方法
                /// </summary>
                /// <param name="KeyValue"></param>
                /// <returns></returns>
                public ActionResult DeleteOther(string KeyValue)
                {
                    Com_ArticleBll bll = new Com_ArticleBll();
    
                    try
                    {
                        int IsOk = 1;
                        string Message = "删除成功";
                        if (!string.IsNullOrEmpty(KeyValue))
                        {
                            string[] array = KeyValue.Split(',');
                            foreach (var item in array)
                            {
                                Com_Article Oldentity = bll.Factory.FindEntity(item);//获取没更新之前实体对象
                                Oldentity.DeleteMark = 1;
                                Oldentity.Modify(item, false);//登录功能做好改为true
                                IsOk = bll.Factory.Update(Oldentity);
                                this.WriteLog(IsOk, Oldentity, Oldentity, item, Message);
                            }
                        }
                        else
                        {
                            Message = "删除失败";
                            IsOk = 1;
    
                        }
                        return Content(new JsonMessage { Success = true, Code = IsOk.ToString(), Message = Message }.ToString());
                    }
                    catch (Exception ex)
                    {
                        this.WriteLog(-1, null, null, KeyValue, "操作失败:" + ex.Message);
                        return Content(new JsonMessage { Success = false, Code = "-1", Message = "操作失败:" + ex.Message }.ToString());
                    }
    
                }
                /// <summary>
                /// 文章发布
                /// </summary>
                /// <param name="KeyValue"></param>
                /// <returns></returns>
                public ActionResult PutArticle(string KeyValue, int State)
                {
                    Com_ArticleBll bll = new Com_ArticleBll();
    
                    try
                    {
                        int IsOk = 1;
                        string Message = "操作成功";
                        if (!string.IsNullOrEmpty(KeyValue))
                        {
                            string[] array = KeyValue.Split(',');
                            foreach (var item in array)
                            {
                                Com_Article Oldentity = bll.Factory.FindEntity(item);//获取没更新之前实体对象
                                Oldentity.PutTime = DateTime.Now;
                                Oldentity.State = State;
                                Oldentity.Modify(item, false);//登录功能做好改为true
                                IsOk = bll.Factory.Update(Oldentity);
                                this.WriteLog(IsOk, Oldentity, Oldentity, item, Message);
                            }
                        }
                        else
                        {
                            Message = "操作失败";
                            IsOk = 0;
                        }
                        return Content(new JsonMessage { Success = true, Code = IsOk.ToString(), Message = Message }.ToString());
                    }
                    catch (Exception ex)
                    {
                        this.WriteLog(-1, null, null, KeyValue, "操作失败:" + ex.Message);
                        return Content(new JsonMessage { Success = false, Code = "-1", Message = "操作失败:" + ex.Message }.ToString());
                    }
    
                }
            }
        }

    (2)Com_ArticleBll.cs 业务方法

    using Bobo.DataAccess;
    using Bobo.Repository;
    using Bobo.Utilities;
    using IA.Entity;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.Common;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace IA.Business
    {
        // <summary> 
        /// 文章信息表 
        /// <author> 
        ///     <name>YHB</name> 
        ///      <date>2018.10.18</date> 
        /// </author> 
        /// </summary> 
        public class Com_ArticleBll : RepositoryFactory<Com_Article>
        {
            /// <summary>
            /// 获取文章数据
            /// </summary>
            /// <param name="ArticleTitle"></param>
            /// <param name="jgp"></param>
            /// <returns></returns>
            public DataTable GetTablePage(string ArticleTitle, string ArticleType, ref JqGridParam jgp)
            {
                StringBuilder whereSql = new StringBuilder();
                List<DbParameter> param = new List<DbParameter>();
    
                whereSql.Append(@" AND DeleteMark<>1");
                if (!StringHelper.IsNullOrEmpty(ArticleTitle))
                {
                    whereSql.Append(@" AND ArticleTitle LIKE @ArticleTitle");
                    param.Add(DbFactory.CreateDbParameter("@ArticleTitle", '%' + ArticleTitle + '%'));
                }
                if (!StringHelper.IsNullOrEmpty(ArticleType))
                {
                    whereSql.Append(@" AND ArticleType=@ArticleType");
                    param.Add(DbFactory.CreateDbParameter("@ArticleType", ArticleType));
                }
                return Factory.FindTablePage(whereSql.ToString(), param.ToArray(), ref jgp);
            }
           
    
        }
    }

    (3)在实现视图之前,我们需要在区域下的Shared中创建一个分部视图_PartialNav.cshtml存放左边菜单

    <div class="center-nav L font-yahei">
        <div class="center-nav-title">功能导航</div>
       
        <div class="center-nav-item"><a href="/BackstageModule/JournalMange/Index" class="scgl">素材管理</a></div>
        <div class="center-nav-item"><a href="/BackstageModule/PayForMange/Index" class="zfgl">支付管理</a></div>
        <div class="center-nav-item"><a href="/BackstageModule/BannerMange/Index" class="gggl">广告管理</a></div>
        <div class="center-nav-item"><a href="/BackstageModule/ArticleMange/Index" class="hydt">资讯管理</a></div>
    </div>
    
    

    (4)Index.cshtml视图中的代码:

    @{
        ViewBag.Title = "管理后台 - 资讯";
        Layout = "~/Views/Shared/_LayoutMange.cshtml";
    }
    <style>
        html {
            background-color: #f3f4f4;
        }
    
        .w_header .header-nav .nav-item li a.wzgl {
            border-bottom: 2px solid #2D81E0;
            background-color: #E8F4FF;
            color: #2D81E0;
            font-weight: bold;
        }
    </style>
    <div class="w_center clear mAuto">
        @Html.Partial("_PartialNav")
        <div class="center-main R">
            <h2 class="center-main-title font-yahei">
                <span>资讯管理&nbsp; /</span>&nbsp;&nbsp;<i>management news</i>
            </h2>
    
            <div class="center-main-box">
                <div class="toolbarBox clear">
                    <div id="searchForm" class="L searchForm">
                        <span class="seachTit">文章标题:</span>
                        <input type="text" id="ArticleTitle" class="seachText" value="" />
                        <input type="text" id="ArticleType" class="seachText" value="" />
                        <a id="searchBtn" class="searchBtn" href="javascript:;" title="搜索"></a>
                    </div>
    
                    <div class="toolbar R">
                        <input type="button" value="添加" class="mainBtn addBtn greenBtn" onclick="showAdd()" />
                        <input type="button" value="发布" class="mainBtn putBtn yellowBtn" onclick="putBtn(1)" />
                        <input type="button" value="取消发布" class="mainBtn putBtn blueBtn sxLenth" onclick="putBtn(0)" />
                        <input type="button" value="删除" class="mainBtn delBtn blueBtn" onclick="delBtn()" />
                    </div>
                </div>
                <table class="dataTable" style="100%;">
                    <thead>
                        <tr>
                            <td style="10%;" class="remElem"><input type="checkbox" class="ckbAll " />选定</td>
                            <td style="40%;" class="tbTit">文章类型</td>
                            <td style="40%;" class="tbTit">文章标题</td>
                            <td style="15%;" class="remElem">推荐</td>
                            <td style="15%;">发布时间</td>
                            <td style="15%;">操作</td>
                        </tr>
                    </thead>
                    <tbody id="dataBody"></tbody>
                </table>
                <div id="listPage" class="m_pageBar com_pageBar" style="padding:0 30px;"></div>
            </div>
        </div>
    </div>
    
    
    
    
    @*分页数据模版*@
    <script id="tempBody" type="text/template">
        {#each data as item}
        <tr>
            <td style="text-align: center;"><input type="checkbox" class="ckb" data-id="!{item.ArticleID}" onclick="change(this)" /></td>
            <td>!{item.ArticleType}</td>
            <td><a href="/BackstageModule/ArticleMange/Form?KeyValue=!{item.ArticleID}">!{item.ArticleTitle}</a> </td>
            {#if item.OptionSet == 1}
            <td style="text-align:center;"><img src="/Content/Images/slice/optionIco.png" width="16" height="16" title="推荐" /></td>
            {#else}
            <td style="text-align:center;"></td>
            {#/if}
            {#if item.State==1}
            <td style="text-align:center;">!{formatDate(item.PutTime, "yyyy-MM-dd")}</td>
            {#else}
            <td style="text-align:center;">未发布</td>
            {#/if}
            <td style="text-align:center;"><a href="/BackstageModule/ArticleMange/Form?KeyValue=!{item.ArticleID}" class="tbBtn tbEdit">编辑</a></td>
        </tr>
        {#/each}
    </script>
    
    @section scripts{
        <script type="text/javascript">
            var KeyValue = "";
    
            $(function () {
                juicer.register('formatDate', formatDate);
                getPageData();
                searchEvent();
            });
            //初始化分页函数
            function getPageData() {
                var param = {
                    rows: 10,
                    url: "/BackstageModule/ArticleMange/GetTable",
                    sidx: "CreateDate",
                    sord: "DESC",
                    searchForm: "#searchForm",
                    infoPanel: '#dataBody',
                    barPanel: '#listPage',
                    template: '#tempBody',
                    callback: handleSuccess
                }
                Pager.init(param);
    
            }
            //查询按钮绑定事件
            function searchEvent() {
                $("#searchBtn").on("click", function () {
                    getPageData();
                });
            }
    
            //添加弹窗
            function showAdd() {
                window.location = "/BackstageModule/ArticleMange/Form";
            }
    
            //删除
            function delBtn() {
                var allVal = "";
                $(".dataTable tbody tr").find(".ckb").each(function () {
                    var ckb = $(this);
                    var ckbVal = ckb.prop("checked");
                    var dataId = ckb.attr("data-id");
                    if (ckbVal == "checked" || ckbVal == true) {
                        allVal += (allVal == "" ? dataId : "," + dataId);
                    }
                });
    
                if (allVal == "") {
                    layer.alert("您没有选中任何项,请选中后再进行操作!", { icon: 0 });
                    return false;
                }
                layer.confirm("是否删除这" + allVal.split(",").length + "条数据?", { icon: 0 }, function () {
                    AjaxJson("/BackstageModule/ArticleMange/DeleteOther", { KeyValue: allVal }, function (data) {
                        layer.msg(data.Message, { icon: data.Code, time: 1000 }, function () {
                            Pager.reload();
                        });
                    });
                });
    
            }
            //发布
            function putBtn(num) {
                var allVal = "";
                $(".dataTable tbody tr").find(".ckb").each(function () {
                    var ckb = $(this);
                    var ckbVal = ckb.prop("checked");
                    var dataId = ckb.attr("data-id");
                    if (ckbVal == "checked" || ckbVal == true) {
                        allVal += (allVal == "" ? dataId : "," + dataId);
                    }
                });
    
                if (allVal == "") {
                    layer.alert("您没有选中任何项,请选中后再进行操作!", { icon: 0 });
                    return false;
                }
                AjaxJson("/BackstageModule/ArticleMange/PutArticle", { KeyValue: allVal, State: num }, function (data) {
                    layer.msg(data.Message, { icon: data.Code, time: 1000 }, function () {
                        Pager.reload();
                    });
                });
            }
            //分页数据加载后绑定的函数
            function handleSuccess() {
                checkAll();
            }
            //全选(包括)
            function checkAll() {
                //全选按钮
                $(".dataTable thead").find(".ckbAll").change(function () {
                    var chkAll = $(this);
                    var chkVal = chkAll.prop("checked");
                    if (chkVal == "checked" || chkVal == true) {
                        $(".dataTable tbody tr").each(function () {
                            var chk = $(this).find(":checkbox");
                            chk.prop("checked", "checked");
                        });
                    }
                    else {
                        $(".dataTable tbody tr").each(function () {
                            var chk = $(this).find(":checkbox");
                            chk.removeAttr("checked");
                        });
                    }
                });
    
    
            }
        </script>
    
    }

    在上面的代码中,我们引用了前面创建好的_LayoutMange.cshtml头尾布局页,还用到了juicer轻量级的模板加载数据以及弹窗,分页操作是自己写的一个m_pager.js方法配合着juicer使用,下面我们看具体代码:

    //刷新表格参数
    var reloadParam = null;
    //是否往前退页;默认为退,传入false时不退页
    var isPrevPage = true;
    
    var Pager = function(){
        return {
            init: function(param){
                getList(param);
            },
            reload: function (IsPrevPage) {
                isPrevPage = IsPrevPage;
                reloadPage(reloadParam);
            }
        }
    }();
    
    /*初始化需要的参数
    param = {
        page:目标页码(默认:0或1均可),
        rows:每页显示条数(默认:15),
        url:请求地址,
        sidx:排序字段
        sord:排序类型;
        onePageShow:数据只有一页时是否显示分页(默认不显示)
        searchForm:查询条件所在容器
        infoPanel:信息回填容器,
        barPanel:分页条回填容器,
        template:信息模板容器,
        callback:查询到分页数据后执行的回掉函数
        noDataCallBack:未查询到分页数据执行的回掉函数
    }
    */
    function getList(json) {//获取评论列表
        var json = json || {};
    
        var target = json.page || 1,                //请求页码
            aver = json.rows || 15,                 //每页显示数量,默认15
            sidx = json.sidx,                       //排序字段名
            sord = json.sord,                       //排序类型ASC DESC
            url = json.url,                         //请求URL
            onePageShow = json.onePageShow || false,//数据只有一页时是否显示分页(默认不显示)
            searchForm = json.searchForm,           //查询条件所在容器
            infoPanel = json.infoPanel,             //回填数据容器
            barPanel = json.barPanel,               //分页条容器
            template = json.template,               //模版
            callback = json.callback,               //加载数据成功后执行的回调函数
            noDataCallback = json.noDataCallback;   //加载数据为空时的回调函数
    
        //从初始化参数中构建分页请求参数,包括所有JqGridParam参数和查询条件
        var requestParam = searchForm ? GetWebControls(searchForm) : {};
        requestParam.page = target;
        requestParam.rows = aver;
        requestParam.sidx = sidx;
        requestParam.sord = sord;
        var load = layer.msg('正在加载页面数据…', { icon: 16, shade: 0.05, time: 0, area:"210px" });
        window.setTimeout(function () {
            $.post(url, requestParam, function (d) {
                if (d.success) {
                    if (typeof d.data == 'undefined' || d.data.length == 0) {
                        var width = $(infoPanel).width() <= 0 ? $(infoPanel).parent().width() : $(infoPanel).width();
                        $(infoPanel).html('<h4 class="noInfo" style="' + width + 'px">暂无信息</h4>');
                        $(barPanel).hide();
                        noDataCallback ? noDataCallback() : null;
                    } else {
                        $(barPanel).show();
                        $(infoPanel).html(juicer($(template).html(), d));
                        callback ? callback(d) : null;
                    }
                    getPage(json, d.pageData, d.data.length, barPanel, getList);
                } else {
                    layer.alert(d.pageData);  
                }
                layer.close(load);
            }, "json");
        }, 500);    
    }
    
    /*分页S*/
    
    /*
    pageParam 分页参数json
    pageParam = {
        "records":int,       总数据条数    int
        "rows":int,          每页显示条数  int
        "page":int,          当前页索引(从0开始)
        "total":int,         查询结果的记录总数
        "dataLength":int     当前页所包含的记录数
    }
    */
    function getPage(json, pageParam, dataLength, panel, fn) {
        var pageNum = Math.ceil(pageParam.records / pageParam.rows);
        var barHtml = "";
        var tempHtml = "";
        if (pageNum <= 1) {
            if (json.onePageShow) {
                barHtml = '<div class="L clearfix">
                            <a href="javascript:;" class="first aElem"><i class="icon_first"></i>首页</a>
                            <a href="javascript:;" class="prev aElem"><i class="icon_pre"></i>上一页</a>'
                            + tempHtml +
                            '<a href="javascript:;" class="next aElem"><i class="icon_next"></i>下一页</a>
                            <a href="javascript:;" class="last aElem"><i class="icon_last"></i>尾页</a>
                        </div>
                        <p class="page_info R">共 ' + pageNum + ' 页 ' + pageParam.records + ' 条记录 当前显示 第( <em>' + (pageParam.page) + '</em> )页</p>';
            }
        }
        else if (pageNum <= 8) {
            for (var i = 1; i <= pageNum; i++) {
                if (i == pageParam.page) {
                    tempHtml += '<a href="javascript:;" class="pageBtn active">' + i + '</a>';
                } else {
                    tempHtml += '<a href="javascript:;" class="pageBtn">' + i + '</a>'
                }
            }
            barHtml = '<div class="L clearfix">
                            <a href="javascript:;" class="first aElem"><i class="icon_first"></i>首页</a>
                            <a href="javascript:;" class="prev aElem"><i class="icon_pre"></i>上一页</a>'
                            + tempHtml +
                            '<a href="javascript:;" class="next aElem"><i class="icon_next"></i>下一页</a>
                            <a href="javascript:;" class="last aElem"><i class="icon_last"></i>尾页</a>
                        </div>
                        <p class="page_info R">共 ' + pageNum + ' 页 ' + pageParam.records + ' 条记录 当前显示 第( <em>' + (pageParam.page) + '</em> )页</p>';
        } else {
            var start = 0;
            var end = 0;
            if (pageNum <= 8) {
                start = 1;
                end = pageNum;
            } else {
                if (pageParam.page <= 1) {
                    start = 1;
                    end = 8;
                } else if (pageParam.page + 6 <= pageNum) {
                    start = pageParam.page - 1;
                    end = pageParam.page + 6;
                } else {
                    start = pageNum - 6;
                    end = pageNum;
                }
            }
            for (var i = start; i <= end; i++) {
                if (i == pageParam.page) {
                    tempHtml += '<a href="javascript:;" class="pageBtn active">' + i + '</a>';
                } else {
                    tempHtml += '<a href="javascript:;" class="pageBtn">' + i + '</a>'
                }
            }
            barHtml = '<div class="L p_clearfix">
                            <a href="javascript:;" class="first aElem"><i class="icon_first"></i>首页</a>
                            <a href="javascript:;" class="prev aElem"><i class="icon_pre"></i>上一页</a>'
                            + tempHtml +
                            '<a href="javascript:;" class="next aElem"><i class="icon_next"></i>下一页</a>
                            <a href="javascript:;" class="last aElem"><i class="icon_last"></i>尾页</a>
                        </div>
                        <p class="page_info R">共 ' + pageNum + ' 页 ' + pageParam.records + ' 条记录 当前显示第(<em>' + (pageParam.page) + '</em>)页</p>';
        }
        if (!$(panel).hasClass('.m_pageBar')) {
            $(panel).addClass('m_pageBar');
        }
        $(panel).html(barHtml);
      
       
        //waterfall(".center-ul", ".center-ul-li");
        $("a", panel).click(function () {
            var now = pageParam.page;
            var target = pageParam.page;
            if ($(this).text() == (now).toString()) {
                return false;
            } else if ($(this).hasClass("first")) {
                if (now == 1) {
                    return false;
                } else {
                    target = 1;
                }
            } else if ($(this).hasClass("last")) {
                if (now == pageParam.total) {
                    return false;
                } else {
                    target = pageParam.total;
                }
            } else if ($(this).hasClass("prev")) {
                if (now == 1) {
                    return false;
                } else {
                    target = now - 1;
                }
            } else if ($(this).hasClass("next")) {
                if (now == pageNum) {
                    return false;
                } else {
                    target = now + 1;
                }
            } else {
                var text = parseInt($(this).text());
                target = text;
            }
            json.page = target;
            fn(json);
            return false;
        });
        reloadParam = json;
        //当前如果是最后一页,并且只有一条记录时,重载参数会指向前一页
        //console.info("zuihou" + (json.page == pageNum));
        //console.info("jilu" + (dataLength == 1));
        if (json.page == pageNum && dataLength == 1) {
            isPrevPage ? null : reloadParam.page -= 1;
        }
    }
    /*分页E*/
    
    /*重载当前页*/
    function reloadPage() {
        getList(reloadParam);
    }
    /*重载当前页*/

    (5)Form.cshtml视图实现,在这个视图中我们主要用到富文本编辑器,对于该编辑器的一些设置(比如代码高亮等),在前篇文章中我们已经详细讲到,同时这个用到了的js方法和验证都在我们之前的前端文件中。下面看看改视图中的代码:

    @{
        ViewBag.Title = "文章管理 - 添加/编辑";
        Layout = "~/Views/Shared/_LayoutMange.cshtml";
    }
    
    <style>
        .w_header .header-nav .nav-item li a.wzgl {
            border-bottom: 2px solid #2D81E0;
            background-color: #E8F4FF;
            color: #2D81E0;
            font-weight: bold;
        }
    </style>
    <div class="w_center clear mAuto center-all">
        <div class="center-map-nav font-yahei">
            <div class="map-nav-tit L"><i><img src="~/Content/Images/slice/titIco.png" width="9" height="18" /></i><span class="map-nav-name">行业资讯</span><span>-添加/编辑</span></div>
            <div class="map-nav-btn R">
                <input type="button" value="保存" class="mainBtn addBtn greenBtn" onclick="AcceptClick(0)" />
                @*<input type="button" value="发布" class="putBtn blueBtn" onclick="AcceptClick(1)" />*@
                <input type="button" value="返回列表" class="mainBtn blueBtn " onclick="GoBack()" />
            </div>
        </div>
        <form id="form1" class="form" action="/BackstageModule/ArticleMange/SubmitFormData" method="post" enctype="multipart/form-data" style="margin: 1px">
            <input type="hidden" id="KeyValue" name="KeyValue" />
            @*<input type="hidden" id="ArticleType" name="ArticleType" />*@
            <input type="hidden" id="State" name="State" value="0" />
            <table class="form-table  font-yahei">
                <tr>
                    <td colspan="4" class="center-tip">
                        <p>* 格式规范:正文使用宋体14px,1.5倍行距,小标题文字使用宋体加粗,大于等于14px</p>
                        <p>* 附件上传:点击编辑器工具栏 → 回形针&nbsp;<img src="~/Content/Images/slice/attach.png" width="20" height="18" />&nbsp;图标</p>
                    </td>
                </tr>
                <tr>
                    <td class="table-title">标题</td>
                    <td class="table-text"><input type="text" class="txt required" name="ArticleTitle" id="ArticleTitle" datacol="yes" err="标题" checkexpession="NotNull" /></td>
                    <td class="table-title">类型</td>
                    <td class="table-text">
                        <select id="ArticleType" name="ArticleType" class="txt">
                            <option value="zw">杂文</option>
                            <option value="tx">图像</option>
                            <option value="yx">影像</option>
                            <option value="yy">音乐</option>
                            <option value="qg">情感</option>
                            <option value="lx">旅行</option>
                        </select>
                    </td>
                </tr>
                <tr class="remveAB">
                    <td class="table-title">题图<span style="color:#999;">(用于首页轮播)</span></td>
                    <td class="table-text">
                        <div class="PicBox">
                            <input class="file PicUrl" type="file" name="PicUrl" value="" onchange="SetFileVal($(this))" />
                        </div>
                        <input type="text" class="url1 img-url" readonly="readonly" style="display:none;" />
                        <input type="text" class="url2 img-url" name="PicUrl" id="PicUrl" readonly="readonly" />
                    </td>
                    <td class="table-title">选项</td>
                    <td class="table-text">
                        <input type="hidden" name="OptionSet" id="OptionSet" value="0" />
                        <input type="checkbox" class="CheckOptionSet" onchange="CheckOptionSet($(this))" /><span>推荐</span><span style="color:#999;">(用于首页轮播)</span>
                    </td>
                </tr>
                <tr>
                    <td class="table-title">文章来源</td>
                    <td class="table-text"><input type="text" class="txt" name="Source" id="Source" /></td>
                    <td class="table-title">发布时间</td>
                    <td class="table-text"><input type="text" class="txt Wdate" name="PutTime" id="PutTime" onfocus="WdatePicker()" datacol="yes" err="发布时间" /></td>
    
                </tr>
                
            </table>
            <div>
                <textarea id="ArticleContent" name="ArticleContent" maxlength=2147483647 class="txtArea" datacol="yes" err="文章内容" checkexpession="NotNull" style="99.9%;"></textarea>
            </div>
        </form>
    </div>
    
    @section scripts{
        <script src="~/Content/Scripts/ueditor/ueditor.config.js"></script>
        <script src="~/Content/Scripts/ueditor/ueditor.all.js"></script>
        <script src="~/Content/Scripts/ueditor/lang/zh-cn/zh-cn.js"></script>
        <script src="~/Content/Scripts/ueditor/prettify.js"></script>
        <script type="text/javascript">
            prettyPrint(); //代码高亮
            var KeyValue = GetQuery('KeyValue').replace("null", "");//关于我们无内容时为null
            var ab = GetQuery('ab');
            $(function () {
    
                var ue = UE.getEditor('ArticleContent', { autoFloatEnabled: false, autoHeightEnabled: false });
                ue.addListener('ready', function (editor) {
                    var height = $(window).height(),
                        tabHeight = $(".form-table").outerHeight();
                    headHeight = $(".w_header").outerHeight();
                    footHeight = $(".w_footer").outerHeight();
                    editToolHeight = $("#edui1_toolbarbox").outerHeight(),
                    editBottomHeight = $("#edui1_bottombar").outerHeight(),
                    editHeight = 300;
    
                    ue.setHeight(editHeight);
    
                    InitWebPage(ue);
                });
    
            });
            //初始化数据
            function InitWebPage(ue) {
                if (!!KeyValue) {
                    $("#KeyValue").val(KeyValue);
                    InitControl(ue);
                }
    
            }
            //文件域选择设置
            function SetFileVal(elem) {
                if (!!elem.val()) {
                    $(".url1").val(elem.val()).show();
                    $(".url2").hide();
                }
                else {
                    $(".url1").show();
                    $(".url2").hide();
                }
    
            }
            //选项推荐
            function CheckOptionSet(elem) {
                var elemVal = elem.prop("checked");
                if (elemVal == "checked" || elemVal == true) {
                    $("#OptionSet").val(1);
                }
                else {
                    $("#OptionSet").val(0);
                }
            }
            //得到一个对象实体
            function InitControl(ue) {
                AjaxJson("/BackstageModule/ArticleMange/SetForm", { KeyValue: KeyValue }, function (data) {
                    data.PutTime = formatDate(data.PutTime, "yyyy-MM-dd")
                    SetWebControls(data, "#form1");
                    if (!!data.ArticleContent) {
                        ue.setContent(data.ArticleContent, false);
                    }
                    if (data.OptionSet == 1) {
                        $(".CheckOptionSet").attr("checked", "checked");
                    }
                });
            }
            //保存按钮
            function AcceptClick(num) {
                if (!!KeyValue && num != 0) {
                    $("#State").val(num);
                }
                //if (num == 1) {
                //    $("#PutTime").attr("checkexpession", "NotNull");
                //}
                //else {
                //    $("#PutTime").removeAttr("checkexpession");
                //}
                if (!CheckDataValid('#form1', true)) {
                    return false;
                }
                //提交表单
                $("#form1").ajaxSubmit({
                    dataType: "json",
                    beforeSubmit: function () {
                        layer.msg('正在提交信息,请稍后…', { icon: 16, shade: 0.2, time: 0 });
                    },
                    success: function (data) {
                        if (data.Success) {
                            layer.closeAll();
                            if (!!ab) {
                                window.location = "/BackstageModule/About/Index";
                            }
                            else {
                                window.location = "/BackstageModule/ArticleMange/Index";
                            }
                        }
                        else {
                            layer.alert(data.Message, { icon: data.Code });
                        }
                    }
                });
            }
            //返回列表
            function GoBack() {
                if (!!ab) {
                    window.location = "/BackstageModule/About/Index";
                }
                else {
                    window.location = "/BackstageModule/ArticleMange/Index";
                }
            }
        </script>
    
    }

    到这一步,我们一个文章管理的功能模块就完成啦,下面看看具体效果图:

    FORM页面(添加修改)

    文章管理 - 添加_编辑.png
    index效果图:
    文章管理 - 添加_编辑.png

    管理后台 - 资讯.png


  • 相关阅读:
    multiview
    RadioButton
    信息存储与管理读书笔记1
    个人Wordpress站点设置Windows Live writer
    test
    test
    AS类库推荐
    JAVA坏境变量中的JAVA_HOME path classpath 的设置与作用
    actionscript3 中关于sprite的mask问题
    RED5遍历客户端并生成在线列表[转]
  • 原文地址:https://www.cnblogs.com/boyzi/p/9951982.html
Copyright © 2020-2023  润新知