網站可能會包含一些模塊:像文章、產品、圖片、留言等。
欄目模塊主要實現功能,啟用或禁用模塊,模塊權限設置,模塊上傳設置等。
權限設置和上傳設置以后專門考慮,先來顯示或禁用模塊。
1、在頂部導航欄添加管理連接
打開Home/Header.cshtml,在<nav>添加代碼
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); } }
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>
效果圖
這里上傳設置和權限設置以后補充。
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