• MVC4做网站后台:栏目管理1、添加栏目-续


    栏目类型跟原来一样分为常规栏目、单页栏目和外部链接。根据栏目类型的不同要隐藏相应的表单和验证(服务器端验证)。另外一个是父栏目必须是常规栏目才行,easyui-combotree要用到树形json数据,考虑不用递归函数而是用ParentPath字段排序的方式实现。

     

    首先在在【CategoryController】中添加这个action,代码

    /// <summary>
            /// 栏目树
            /// </summary>
            /// <param name="categoryId">栏目Id,调用所有栏目为0</param>
            /// <param name="categoryType">栏目类型-1所有栏目,0常规栏目</param>
            /// <param name="jsonType">返回的数据类型【默认(0)-EasyuiTree类型】</param>
            /// <returns>Json类型数据</returns>
            public JsonResult Tree(int categoryId = 0, int categoryType = 0, int jsonType = 0)
            {
                IQueryable<Category> _categorys;
                if (categoryType == -1) _categorys = categoryRepository.Progeny(categoryId).OrderByDescending(c => c.ParentPath).ThenBy(c => c.Order);
                else _categorys = categoryRepository.Progeny(categoryId, categoryType).OrderByDescending(c => c.ParentPath).ThenBy(c => c.Order);
                switch (jsonType)
                {
                    default:
                        List<EasyuiTreeNodeViewModel> _trees = new List<EasyuiTreeNodeViewModel>();
                        Dictionary<int, EasyuiTreeNodeViewModel> _nodes = new Dictionary<int, EasyuiTreeNodeViewModel>();
                        foreach (var _category in _categorys)
                        {
                            if (_trees.Exists(n => n.parentid == _category.CategoryId))//存在子节点
                            {
                                var _childern = _trees.Where(n => n.parentid == _category.CategoryId).ToList();
                                _trees.RemoveAll(n => n.parentid == _category.CategoryId);
                                _trees.Add(new EasyuiTreeNodeViewModel { parentid = _category.ParentId, id = _category.CategoryId, text = _category.Name, state = "open", children = _childern });
                            }
                            else _trees.Add(new EasyuiTreeNodeViewModel { parentid = _category.ParentId, id = _category.CategoryId, text = _category.Name, state = "close"});
                        }
                        return Json(_trees);
                }
            }

     

    再在控制器中添加Add的局部视图方法

    /// <summary>
            /// 添加栏目
            /// </summary>
            /// <returns>局部视图</returns>
            public PartialViewResult Add()
            {
                return PartialView(new Category { CategoryView = "Index", ContentOrder = 0, ContentView = "Detail", Model = "", Order = 0, PageSize = 20, ParentId = 0, RecordName = "文章", RecordUnit = "", Type = 0 });
            }
    右键添加强类型局部视图

    @model Ninesky.Models.Category
    <div class="c_navbar">栏目管理 >> 添加栏目</div>
    @using (Html.BeginForm("Add", "Category", FormMethod.Post, new { id = "categoryadd_form" }))
    {
        @Html.AntiForgeryToken()
        <div class="fs_wapper">
            <div class="header">添加栏目</div>
            @Html.ValidationSummary()
            <table class="fieldset">
                <tr>
                    <th>@Html.LabelFor(model => model.Name)<span>*</span></th>
                    <td>@Html.EditorFor(model => model.Name)
                        @Html.ValidationMessageFor(model => model.Name)
                        @Html.DisplayDescriptionFor(model => model.Name)
                        
                    </td>
                </tr>
                <tr>
                    <th>@Html.LabelFor(model => model.ParentId)<span>*</span></th>
                    <td>
                        <input id="ParentId" name="ParentId" style=" 200px;" data-url="@Url.Action("Tree", "Category")" value="@Model.ParentId" />
                        @Html.ValidationMessageFor(model => model.ParentId)
                    </td>
                </tr>
                <tr>
                    <th>@Html.LabelFor(model => model.Type)<span>*</span></th>
                    <td>
                        <input id="Type" name="Type" value="@Model.Type" />
                        @Html.ValidationMessageFor(model => model.Type)
                    </td>
                </tr>
                <tr>
                    <th>@Html.LabelFor(model => model.Model)<span>*</span></th>
                    <td>
                        <input id="Model" name="Model" value="@Model.Model" data-url="@Url.Action("Items", "Module", new { id = 1 })" />
                        @Html.ValidationMessageFor(model => model.Model)
                        @Html.DisplayDescriptionFor(model => model.Model)
                        
                    </td>
                </tr>
                <tr>
                    <th>@Html.LabelFor(model => model.CategoryView)<span>*</span></th>
                    <td>
                        <input id="CategoryView" class="easyui-combobox" name="CategoryView" data-options="valueField:'Name',textField:'Name',url:'@Url.Action("Views", "View", new { controllerName="Category" })'" value="@Model.CategoryView">
                        @Html.ValidationMessageFor(model => model.CategoryView)
                    </td>
                </tr>
                <tr>
                    <th>@Html.LabelFor(model => model.ContentView)<span>*</span></th>
                    <td>
                        <input id="ContentView" class="easyui-combobox" name="ContentView" data-url="@Url.Action("Views", "View")" data-options="valueField:'Name',textField:'Name',url:'@Url.Action("Views", "Category", new { controllerName="Article" })'" value="@Model.ContentView">
                        @Html.ValidationMessageFor(model => model.CategoryView)
                    </td>
                </tr>
                <tr>
                    <th>@Html.LabelFor(model => model.LinkUrl)<span>*</span></th>
                    <td>
                        @Html.EditorFor(model => model.LinkUrl)
                        @Html.ValidationMessageFor(model => model.LinkUrl)
                        @Html.DisplayDescriptionFor(model => model.LinkUrl)
                        
                    </td>
                </tr>
                <tr>
                    <th>@Html.LabelFor(model => model.Order)<span>*</span></th>
                    <td>
                        @Html.EditorFor(model => model.Order)
                        @Html.ValidationMessageFor(model => model.Order)
                        @Html.DisplayDescriptionFor(model => model.Order)
                        
                    </td>
                </tr>
                <tr>
                    <th>@Html.LabelFor(model => model.ContentOrder)<span>*</span></th>
                    <td>
                        <select id="ContentOrder" name="ContentOrder" class="easyui-combobox" style=" 200px;"
                            data-options="url:'@Url.Action("OrderList", "Item", new {area="" })',valueField:'Value',textField:'Name'">
                        </select>
                        @Html.ValidationMessageFor(model => model.ContentOrder)
                        @Html.DisplayDescriptionFor(model => model.ContentOrder)
                        
                    </td>
                </tr>
                <tr>
                    <th>@Html.LabelFor(model => model.PageSize)<span>*</span></th>
                    <td>
                        @Html.EditorFor(model => model.PageSize)
                        @Html.ValidationMessageFor(model => model.PageSize)
                        @Html.DisplayDescriptionFor(model => model.PageSize)
                        
                    </td>
                </tr>
                <tr>
                    <th>@Html.LabelFor(model => model.RecordUnit)<span>*</span></th>
                    <td>
                        @Html.EditorFor(model => model.RecordUnit)
                        @Html.ValidationMessageFor(model => model.RecordUnit)
                        @Html.DisplayDescriptionFor(model => model.RecordUnit)
                        
                    </td>
                </tr>
                <tr>
                    <th>@Html.LabelFor(model => model.RecordName)<span>*</span></th>
                    <td>
                        @Html.EditorFor(model => model.RecordName)
                        @Html.ValidationMessageFor(model => model.Name)
                        @Html.DisplayDescriptionFor(model => model.RecordName)
                        
                    </td>
                </tr>
                <tr>
                    <th></th>
                    <td>
                        <a id="CategoryAdd_Save" href="javascript:void()" class="easyui-linkbutton">保存</a>
                    </td>
                </tr>
            </table>
        </div>
        @Scripts.Render("~/Areas/Admin/Scripts/Category.js");
        <script type="text/javascript">
            CategoryAddReady();
        </script>
    }
    @Scripts.Render("~/bundles/jqueryval")

    在category.js中添加相应的js函数

    //Add视图添加载完成函数
    function CategoryAddReady() {
        $.post($('#ParentId').attr('data-url'), null, function (data) {
            if (data == "") data = [{ id: 0, text: "无" }];
            else {
                data.unshift({ id: 0, text: "无" });
            }
            $('#ParentId').combotree({ required: true, data: data });
    
        });
        $('#Type').combobox({
            valueField: 'id',
            textField: 'text',
            data: [{ 'id': 0, 'text': '常规栏目' }, { 'id': 1, 'text': '单页栏目' }, { 'id': 2, 'text': '外部链接' }],
            required: true,
            onSelect: function (rec) {
                CategoryAdd_TypeChange(rec.id);
            }
        });
        $.post($('#Model').attr("data-url"), null, function (data) {
            if (data == "") data = [{ Model: "", Name: "无" }];
            else {
                data.unshift({ Model: "", Name: "无" });
            }
            $('#Model').combobox({
                valueField: 'Model',
                textField: 'Name',
                data: data,
                required: true,
                onSelect: function (rec) {
                    CategoryAdd_ModelChange(rec.Model);
                }
            });
        });
    
        $('#ContentView').parent().parent().hide();
        $('#LinkUrl').parent().parent().hide();
        $('#ContentOrder').parent().parent().hide();
        $('#RecordUnit').parent().parent().hide();
        $('#PageSize').parent().parent().hide();
        $('#RecordName').parent().parent().hide();
        //保存事件
        $('#CategoryAdd_Save').click(function () {
            CategoryAdd_Save();
        });
        //CategoryAdd_TypeChange(0);
    }
    //Add视图类型切换事件
    function CategoryAdd_TypeChange(typeId) {
        //常规栏目
        if (typeId == 0) {
            //模型
            $('#Model').parent().parent().show();
            var _modelValue = $('#Model').combobox('getValue');
            CategoryAdd_ModelChange(_modelValue);
    
        }//单页栏目
        else if (typeId == 1) {
            //模型
            $('#Model').parent().parent().hide();
            //栏目视图
            $('#CategoryView').parent().parent().show();
            //内容视图
            $('#ContentView').parent().parent().hide();
            //链接地址
            $('#LinkUrl').parent().parent().hide();
            //内容排序
            $('#ContentOrder').parent().parent().hide();
            //每页记录数
            $('#PageSize').parent().parent().hide();
            //记录单位
            $('#RecordUnit').parent().parent().hide();
            //记录名称
            $('#RecordName').parent().parent().hide();
        }//外部链接
        else if (typeId == 2) {
            //模型
            $('#Model').parent().parent().hide();
            //栏目视图
            $('#CategoryView').parent().parent().hide();
            //内容视图
            $('#ContentView').parent().parent().hide();
            //链接地址
            $('#LinkUrl').parent().parent().show();
            //内容排序
            $('#ContentOrder').parent().parent().hide();
            //每页记录数
            $('#PageSize').parent().parent().hide();
            //记录单位
            $('#RecordUnit').parent().parent().hide();
            //记录名称
            $('#RecordName').parent().parent().hide();
        }
    }
    
    //Add视图模型切换事件
    function CategoryAdd_ModelChange(value) {
        if (value == "")//模型为无
        {
            //栏目视图
    
            $('#CategoryView').parent().parent().show();
            //内容视图
            $('#ContentView').parent().parent().hide();
            //链接地址
            $('#LinkUrl').parent().parent().hide();
            //内容排序
            $('#ContentOrder').parent().parent().hide();
            //每页记录数
            $('#PageSize').parent().parent().hide();
            //记录单位
            $('#RecordUnit').parent().parent().hide();
            //记录名称
            $('#RecordName').parent().parent().hide();
        }
        else {
            $('#CategoryView').parent().parent().show();
            //内容视图
            $('#ContentView').parent().parent().show();
            //链接地址
            $('#LinkUrl').parent().parent().hide();
            //内容排序
            $('#ContentOrder').parent().parent().show();
            //每页记录数
            $('#PageSize').parent().parent().show();
            //记录单位
            $('#RecordUnit').parent().parent().show();
            //记录名称
            $('#RecordName').parent().parent().show();
            var _modelValue = $('#Model').combobox('getValue');
            $('#ContentView').combobox('reload', $('#ContentView').attr('data-url') + '?controllerName=' + _modelValue);
        }
    }
    //添加保存
    function CategoryAdd_Save() {
        $('#categoryadd_form').form('submit', {
            success: function (data) {
                var rt = jQuery.parseJSON(data);
                //验证
                Authentication(data.Authentication);
                //操作成功
                if (rt.Success) {
                    $(document.body).append("<div id='CategoryAdd_SuccessDialog'></div>");
                    $('#CategoryAdd_SuccessDialog').dialog({
                        title: '操作成功',
                         280,
                        height: 138,
                        closed: false,
                        cache: false,
                        content: '<br />添加栏目成功',
                        modal: true,
                        buttons:[{
                            text:'继续添加栏目',
                            handler: function () {
                                var _layout = $('#layout');
                                var _center = _layout.layout('panel', 'center');
                                _center.panel('refresh');
                                var _west = _layout.layout('panel', 'west');
                                _west.panel('refresh');
                                $('#CategoryAdd_SuccessDialog').dialog('destroy');
                            }
                        },{
                            text:'关闭',
                            handler: function () {
                                var _layout = $('#layout');
                                var _west = _layout.layout('panel', 'west');
                                _west.panel('refresh');
                                $('#CategoryAdd_SuccessDialog').dialog('destroy');
                            }
                        }]
                    });
                }
                else {
                    var msg = "";
                    if (rt.ValidationList != undefined) ShowValidationMessage(rt.ValidationList);
                    if (msg != "") msg = rt.Message + "<br /> <p> 原因如下:" + "<ul>" + msg + "</ul></p>";
                    else msg = rt.Message;
                    $.messager.alert("添加栏目失败", msg, "error");
                }
            }
        });
    }

    再次在控制器中添加处理action

    [HttpPost]
            public JsonResult Add(Category category)
            {
                JsonViewModel _jdata = new JsonViewModel();
                if (ModelState.IsValid)//模型验证通过
                {
                    //父栏目
                    if (category.ParentId == 0) category.ParentPath = "0";
                    else
                    {
                        var _parentCategory = categoryRepository.Find(category.ParentId);
                        if (_parentCategory == null) ModelState.AddModelError("ParentId", "父栏目不存在。");
                        else if (_parentCategory.Type != 0) ModelState.AddModelError("ParentId", "父栏目不是常规栏目,不能添加子栏目。");
                        else category.ParentPath = _parentCategory.ParentPath + "," + _parentCategory.CategoryId;
                    }
                    //根据栏目类型验证字段
                    switch (category.Type)
                    {
                        case 0://常规栏目
                            if (string.IsNullOrEmpty(category.Model))//模型为空
                            {
                                category.ContentView = category.LinkUrl = category.RecordUnit = category.RecordName = null;
                                category.ContentOrder = category.PageSize = null;
                            }
                            else
                            {
                                if (string.IsNullOrEmpty(category.CategoryView)) ModelState.AddModelError("CategoryView", "栏目视图不能为空。");
                                if (string.IsNullOrEmpty(category.ContentView)) ModelState.AddModelError("ContentView", "内容视图不能为空。");
                                if (category.ContentOrder == null) ModelState.AddModelError("ContentOrder", "内容排序方式不能为空。");
                                if (category.PageSize == null) ModelState.AddModelError("PageSize", "每页记录数不能为空。");
                                if (string.IsNullOrEmpty(category.RecordUnit)) ModelState.AddModelError("RecordUnit", "记录单位不能为空。");
                                if (string.IsNullOrEmpty(category.RecordName)) ModelState.AddModelError("RecordName", "记录名称不能为空。");
                                category.LinkUrl = null;
                            }
                            break;
                        case 1://单页栏目
                            if (string.IsNullOrEmpty(category.CategoryView)) ModelState.AddModelError("CategoryView", "栏目视图不能为空。");;
                            category.Model = category.ContentView = category.LinkUrl = category.RecordUnit = category.RecordName = null;
                            category.ContentOrder = category.PageSize = null;
                            break;
                        case 2:
                            if (string.IsNullOrEmpty(category.LinkUrl)) ModelState.AddModelError("LinkUrl", "链接地址不能为空。");
                            category.Model = category.CategoryView = category.ContentView = category.RecordUnit = category.RecordName =category.ContentView = null;
                            category.ContentOrder = category.PageSize = null;
                            break;
                    }
                    //存在逻辑验证错误
                    if (!ModelState.IsValid) return Json(new JsonViewModel(ModelState));
                    else
                    {
                        if (categoryRepository.Add(category)) return Json(new JsonViewModel() { Success = true, Message = "添加栏目成功!" });
                        else return Json(new JsonViewModel() { Success = false, Message = "未能保存导数据库。" });
                    }
                }
                //模型验证失败
                else return Json(new JsonViewModel(ModelState));
            }

    image

  • 相关阅读:
    提高你的Java代码质量吧:正确使用String、StringBuffer、StringBuilder
    IAAS云计算产品畅想-云主机产品内涵
    Boa服务器在ARM+Linux上的移植
    二叉树的遍历的迭代和递归实现方式
    OpenRisc-42-or1200的ALU模块分析
    根据不同的下拉值,出现相应的文本输入框
    boost------asio库的使用2(Boost程序库完全开发指南)读书笔记
    C++一些注意点之操作符重载
    mac下修改mysql的默认字符集为utf8
    jquery_EasyUI的学习
  • 原文地址:https://www.cnblogs.com/mzwhj/p/3453231.html
Copyright © 2020-2023  润新知