文章出處

網站可能會包含一些模塊:像文章、產品、圖片、留言等。

欄目模塊主要實現功能,啟用或禁用模塊,模塊權限設置,模塊上傳設置等。

權限設置和上傳設置以后專門考慮,先來顯示或禁用模塊。

1、在頂部導航欄添加管理連接

image

打開Home/Header.cshtml,在<nav>添加代碼

image

2、添加Module接口

using Ninesky.Models;
using System.Linq;

namespace Ninesky.Areas.Admin.Repository
{
    /// <summary>
    /// 后臺管理模塊接口
    /// <remarks>
    /// 版本v1.0
    /// 創建2013.12.10
    /// </remarks>
    /// </summary>
    interface InterfaceModule:Ninesky.Repository.InterfaceModule
    {
        /// <summary>
        /// 查找模塊
        /// </summary>
        /// <returns>所有模塊列表</returns>
        IQueryable<Module> Find();

        /// <summary>
        /// 修改模塊信息
        /// </summary>
        /// <param name="module">模塊</param>
        /// <returns>是否修改成功</returns>
        bool Modify(Module module);
    }
}
3、接口實例
using Ninesky.Models;
using System.Linq;

namespace Ninesky.Areas.Admin.Repository
{
    /// <summary>
    /// 模塊接口實例
    /// <remarks>
    /// 版本v1.0
    /// 創建2013.12.12
    /// </remarks>
    /// </summary>
    public class ModuleRepository:Ninesky.Repository.ModuleRepository,InterfaceModule
    {
        public IQueryable<Module> Find()
        {
            return nContext.Modules;
        }

        public bool Modify(Module module)
        {
            nContext.Modules.Attach(module);
            nContext.Entry<Module>(module).State = System.Data.EntityState.Modified;
            return nContext.SaveChanges() > 0;
        }
    }
}

4、添加控制器ModuleController

首先添加一個實現返回模塊列表的action

/// <summary>
        /// 列表
        /// </summary>
        /// <param name="enable">啟用狀態。【0-全部,1-啟用,2-禁用】</param>
        /// <returns>
        /// 普通請求時返回包含強類型List\<Module\>的視圖<br />
        /// ajax請求返回json類型List\<Module\>
        /// </returns>
        public ActionResult Items(int id = 0)
        {

            var _modules = moduleRepository.Find();
            if (Request.IsAjaxRequest()) return Json(_modules);
            return View(_modules);
        }

菜單

/// <summary>
        /// 菜單
        /// </summary>
        /// <returns></returns>
        public ActionResult Menu()
        {
            return PartialView(moduleRepository.Find());
        }

菜單視圖

@model IEnumerable<Ninesky.Models.Module>
<div id="westmenu" class="easyui-accordion">
    <div title="模塊列表" class="leftsidebar">
        <ul>
            @foreach(var item in Model){
            <li>@Html.ActionLink(item.Name, "Index", "Module", new { id = item.ModuleId }, new { @class = "westmenuitem" })</li>
            }
        </ul>
    </div>
</div>
@*@Scripts.Render("~/Areas/Admin/Scripts/Category.js")*@
<script type="text/javascript">
    WestMenu();
</script>

模塊信息頁

/// <summary>
        /// 模塊信息頁
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public ActionResult Index(int id)
        {
            return PartialView(moduleRepository.Find(id));
        }
@model Ninesky.Models.Module

<div class="c_navbar">后臺管理 >> 模塊管理 >> 模塊信息</div>
<div class="easyui-tabs">
    <div title="基本信息">
        <div class="fs_wapper">
            @using (Html.BeginForm("Modify", "Module", FormMethod.Post, new { id = "module_base" }))
            {
                @Html.AntiForgeryToken()
                @Html.ValidationSummary(true)
                <div class="header">@Html.HiddenFor(model => model.ModuleId)</div>
                @Html.ValidationSummary()
                <table class="fieldset">
                    <tr>
                        <th>@Html.LabelFor(model => model.Name)<span>*</span></th>
                        <td>@Html.TextBoxFor(model => model.Name, new { disabled = "disabled" })</td>
                    </tr>
                    <tr>
                        <th>@Html.LabelFor(model => model.Enable)<span>*</span></th>
                        <td>@Html.EditorFor(model => model.Enable)
                            @Html.ValidationMessageFor(model => model.Description)
                        </td>
                    </tr>
                    <tr>
                        <th>@Html.LabelFor(model => model.Model)<span>*</span></th>
                        <td>@Html.TextBoxFor(model => model.Model, new { disabled = "disabled" })</td>
                    </tr>
                    <tr>
                        <th>@Html.LabelFor(model => model.Description)</th>
                        <td>@Html.EditorFor(model => model.Description)
                            @Html.ValidationMessageFor(model => model.Description)
                        </td>
                    </tr>
                    <tr>
                        <th></th>
                        <td>
                            <a id="btn_modulebase_save" class="easyui-linkbutton">保存</a>
                    </tr>
                </table> 
            }
            @Scripts.Render("~/Areas/Admin/Scripts/Module.js")
            <script>
                ModuleBase_Ready();
            </script>
        </div>
    </div>
    <div title="上傳設置">……</div>
    <div title="權限設置">……</div>
</div>

效果圖

image

這里上傳設置和權限設置以后補充。

5、控制器中添加啟用、關閉模塊處理action

/// <summary>
        /// 修改模塊信息
        /// </summary>
        /// <returns></returns>
        public ActionResult Modify(int? ModuleId,bool? Enable,string Description)
        {
            JsonViewModel _jsonViewModel = new JsonViewModel() { Authentication = 0, Success = true };
            bool _modifyed = false;
            if (ModuleId == null) 
            {
                _jsonViewModel.Success = false;
                _jsonViewModel.ValidationList.Add("ModuleId", "模塊Id不能為空");
            }
            if (Enable == null)
            {
                _jsonViewModel.Success = false;
                _jsonViewModel.ValidationList.Add("Enable", "啟用狀態不能為空");
            }
            if (_jsonViewModel.Success)
            {
                var _module = moduleRepository.Find((int)ModuleId);
                if (_module == null)
                {
                    _jsonViewModel.Success = false;
                    _jsonViewModel.Message = "模塊存在";
                }
                else
                {
                    if (_module.Enable != Enable) { _module.Enable = (bool)Enable; _modifyed = true; }
                    if (_module.Description != Description) { _module.Description = Description; _modifyed = true; }
                    if (_modifyed)
                    {
                        if (moduleRepository.Modify(_module)) { _jsonViewModel.Success = true; _jsonViewModel.Message = "修改模塊成功。"; }
                        else { _jsonViewModel.Success = false; _jsonViewModel.Message = "數據未能保存到數據庫"; }
                    }
                    else { _jsonViewModel.Success = false; _jsonViewModel.Message = "數據未發生更改"; }
                }
            }
            else _jsonViewModel.Message = "數據驗證失敗!";
            return Json(_jsonViewModel);
        }

6、模塊過濾器

這里寫個過濾器,ModuleFilter。命名空間Ninesky.Extensions。作用是加到模塊上面,當模塊關閉時,前臺用戶講不能訪問模塊內容。

using Ninesky.Repository;
using System.Web.Mvc;

namespace Ninesky.Extensions
{
    /// <summary>
    /// 模塊過濾器
    /// 屏蔽禁用模塊
    /// <remarks>
    /// 版本v1.0
    /// 創建2013.12.12
    /// </remarks>
    /// </summary>
    public class ModuleFilter:ActionFilterAttribute
    {
        /// <summary>
        /// 模型名
        /// </summary>
        public string Model { get; set; }

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (string.IsNullOrEmpty(Model)) filterContext.Result = new ContentResult() { Content = "未指定模塊" };
            switch (Model)
            {
                case "Article":
                    InterfaceModule _moduleRepository = new ModuleRepository();
                    var _module = _moduleRepository.Find(Model);
                    if (_module == null) filterContext.Result = new ContentResult() { Content = "未找到指定模塊" };
                    else if (!_module.Enable) filterContext.Result = new ContentResult() { Content = _module.Name + "已關閉" };
                    break;
                default:
                    filterContext.Result = new ContentResult() { Content = "未找到指定模塊" };
                    break;
            }
        }
    }
}

=================

代碼網盤或群Ninesky2013-12-12.zip


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()