WedeNet2018.Web-UI層:
結構以下:css
首先,在Controller中定義BaseController,以便加入統一處理邏輯,以下:jquery
using log4net; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using WedeNet2018.Common; namespace WedeNet2018.Web.Controllers { /// <summary> /// 控制器基類 /// </summary> public class BaseController : Controller { protected ILog log { get; set; } protected override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); log.Info("---進入BaseController---"); } } }
在這裏咱們也聲明瞭log4net變量,可在其派生類中決定使用哪種配置的log。
以默認控制器爲例:bootstrap
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using WedeNet2018.BussinessLogic; using PagedList; using WedeNet2018.Infrastructure; using System.Text.RegularExpressions; using WedeNet2018.Common; using WedeNet2018.Common.Models; using log4net; namespace WedeNet2018.Web.Controllers { public class HomeController : BaseController { private OrdersBussinessLogic orderBll; private ElongOrdersDetailsBussinessLogic elongBll; private EmployeesBussinessLogic employeeBll; public HomeController(OrdersBussinessLogic BLL, ElongOrdersDetailsBussinessLogic ElongBll, EmployeesBussinessLogic EmployeeBll) { log = LoggerHelper.WedeNetLogger; orderBll = BLL; elongBll = ElongBll; employeeBll = EmployeeBll; log.Info("----HomeController初始化完成。----"); } public ActionResult Index(int? page) { log.InfoFormat("初始化首頁數據,page={0}", page); int pageSize = 10; int pageNum = (page ?? 1); var orders = orderBll.GetOrders(46).OrderBy(o => o.Id); return View(orders.ToPagedList(pageNum,pageSize)); } public ActionResult Create() { return View(); } [HttpPost] public ActionResult Create(Orders order) { if (string.IsNullOrEmpty(order.OrderSn)) { ModelState.AddModelError("OrderSn", "OrderSn不能爲空"); } if (order.UserId<0) { ModelState.AddModelError("UserId", "UserId必須大於0"); } if (string.IsNullOrEmpty(order.UserName)) { ModelState.AddModelError("UserName", "UserName不能爲空"); } if (string.IsNullOrEmpty(order.UserMobile)) { ModelState.AddModelError("UserMobile", "UserMobile不能爲空"); } if (string.IsNullOrEmpty(order.Email)) { ModelState.AddModelError("Email", "Email不能爲空"); } else { if (!ModelState.IsValidField(order.Email) || !new Regex(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", RegexOptions.IgnoreCase).IsMatch(order.Email)) { ModelState.AddModelError("Email", "Email不是正確的格式"); } } if (ModelState.IsValid) { order.MerchantId = 46; order.UserMobile = "18210928340"; order.DeliveryTypeId = 0; order.ServiceCost = 0; order.DeliveryCost = 0; order.PayCardType = 0; order.Enabled = true; order.IsSettledUp = true; order.HasRecievePay = true; order.HaveGetRecievePay = true; order.Created = DateTime.Now; order.LastModified = DateTime.Now; order.PaySn = ""; order.OrderType = 46; order.Satisfaction = 0; orderBll.Add(order); //插入ElongOrdersDetails表 ElongOrdersDetails detail = new ElongOrdersDetails(); detail.OrderGuid = Guid.NewGuid(); detail.OrderSn = order.OrderSn; detail.OrderId = 0; detail.Status = order.Status; detail.Created = DateTime.Now; detail.LastModified = DateTime.Now; elongBll.Add(detail); orderBll.Commit(); return RedirectToAction("Index"); } return View(); } public ActionResult Details(int id) { Orders order = orderBll.Find(id); return View(order); } public ActionResult Edit(int id) { Orders order = orderBll.Find(id); return View(order); } [HttpPost] public ActionResult Edit(Orders orderEdit) { Orders order = orderBll.Find(orderEdit.Id); if (string.IsNullOrEmpty(orderEdit.Email)) { ModelState.AddModelError("Email", "Email不能爲空"); } else { if (!ModelState.IsValidField(orderEdit.Email) || !new Regex(@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", RegexOptions.IgnoreCase).IsMatch(orderEdit.Email)) { ModelState.AddModelError("Email", "Email不是正確的格式"); } } if (ModelState.IsValid) { order.Email = orderEdit.Email; order.Status = orderEdit.Status; order.ServiceCost = orderEdit.ServiceCost; orderBll.Update(order); } return RedirectToAction("Index"); } public ActionResult Delete(int id) { orderBll.Delete(id); return RedirectToAction("Index"); } public JsonResult GetEmployees() { ResponseBase<List<Employees>> result = new ResponseBase<List<Employees>>(); try { var employees = employeeBll.GetAll().ToList(); result.IsSuccess = true; result.Message = "查詢成功!"; result.resultCode = "200"; result.ResultData = employees; } catch (Exception ex) { result.IsSuccess = false; result.Message = "查詢異常!"+ex.Message; result.resultCode = "500"; } return Json(result); } } }
注意到了,我在構造函數中進行了一些初始化,有日誌的,有須要用到的BussinessLogic處理類,這些BussinessLogic處理類是依賴NInject注入實例化的,並且這三個處理類是屬於不一樣的UnitOfWork和dbcontext(OrdersBussinessLogic和ElongOrdersDetailsBussinessLogic屬於IWedeUnitOfWorks,而EmployeesBussinessLogic屬於IXF0816UnitOfWorks)。ide
這裏要說一下日誌,在這個控制器中我把基類的日誌初始化爲WedeNetLogger,其實要分類打印的日誌能夠有不少,如:函數
根據須要對日誌進行分類,而且在控制器的構造函數中根據狀況進行初始化。ui
Ninject映射spa
要配置NInject,就須要先實現一個工廠,如:日誌
using Ninject; using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing; using WedeNet2018.BussinessLogic; using WedeNet2018.Infrastructure; using WedeNet2018.Infrastructure.Components; namespace WedeNet2018.Web.Controllers { /// <summary> /// Ninject工廠類 /// </summary> public class NinjectControllerFactory : DefaultControllerFactory { private IKernel ninjectKernel; public NinjectControllerFactory() { ninjectKernel = new StandardKernel(); AddBindings(); } private void AddBindings() { ninjectKernel.Bind<AbsWedeDBContex>().To<WedeDBContex>(); ninjectKernel.Bind<IWedeUnitOfWorks>().To<WedeUnitOfWorks<AbsWedeDBContex>>().InSingletonScope(); ninjectKernel.Bind<OrdersBussinessLogic>().ToSelf(); ninjectKernel.Bind<ElongOrdersDetailsBussinessLogic>().ToSelf(); ninjectKernel.Bind<AbsXF0816DBContex>().To<XF0816DBContex>(); ninjectKernel.Bind<IXF0816UnitOfWorks>().To<XF0816UnitOfWorks<AbsXF0816DBContex>>().InSingletonScope(); ninjectKernel.Bind<EmployeesBussinessLogic>().ToSelf(); } protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) { return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType); } } }
我在工廠類的AddBindings()方法裏進行了各類映射關係配置。orm
實現了工廠之後,還須要在Global.asax中註冊這個工廠類,如:blog
而後,咱們就能夠使用NInject了。
MVC4的Bundles
UI項目裏每每須要加載不少js和css,一些通用的能夠放在Bundles裏讓MVC幫忙,如:
bundles.Add(new ScriptBundle("~/bundles/jss").Include( "~/Scripts/jquery-{version}.js", "~/Bootstrap/js/bootstrap.js", "~/js/common.js", "~/js/layer/layer.js" )); bundles.Add(new StyleBundle("~/Content/css").Include( "~/Content/site.css", "~/Bootstrap/css/bootstrap.css", "~/Bootstrap/css/bootstrap-grid.css", "~/Bootstrap/css/bootstrap-reboot.css", "~/js/layer/skin/layer.css", "~/js/layer/skin/default/layer.css" ));
而後,就能夠在視圖模板中使用了,如:
UI展現層主要說明的就這些,另外Bootstrap、layer、jQuery、H5+CSS3內容不介紹了。