使用.net entity framework + .net MVC 开发CMS内容管理系统的新构思(1)

      做了这么多年CMS系统并使用部署了很多内容管理系统之后,决定重新构思一个理想的CMS系统原型,目的是以用户为心突破现有各CMS系统的限制。

      CMS(Content Management System)系统指的内容管理系统,从字面意思来理解 就是管理各种新闻、资讯、通知、文档等各种文字信息的一个系统。总的来说这是一个较为技术的说法。现实现当种,我们涉及到内容管理的系统有很多。列表如下 :

  • 网站管理系统
  • 博客管理系统
  • 微博系统
  • 文档管理系统
  • 采编发系统
  • 站群管理系统
  • 在线文档阅读系统
  • 小书网站系统
  • 文学网站系统
  • 全文检索系统
  • 甚至百度、谷歌等搜索引擎也可以归为内容系统
  • 在线视频系统
  • 在线阅读系统
  • 互动系统:留言、评论、投票调查等
由以上列表可见由于“内容”类型的复杂性,决定了内容管理系统的复杂性,传统定义的CMS系统基本上指的是文章的采、编、发系统,这是从管理行为的解度来解释的,而实际管理中还有很多需要考虑的东西。
下面是笔者总结的在CMS系统经常要考虑的问题。
  1. 采集:各种类型 、格式的内容的采集、外部协作、投稿、其他网站内容的采集。采集绝不仅仅等于投稿或爬虫
  2. 编辑:制作各种类型的文档,常见的挑战是用户要求直接导入WORD,并且保持格式基本不变,用户甚至希望内容能够直接在WORD中编辑、尤其是政府网站大部分文都是行文后以WORD形式存在的。PDF转HMTL也是个问题其中的换行符是需要处理的,如果WORD或PDF中还存在图片往往不能保持图片与文本在原文中的位置。再就是登录超时问题,千万不要让用户辛苦编写的内容丢失,这种打击我们认为是致命伤。同时对于原创撰写着来说,提供很好的辅助撰写功能也是锦上添花的事情。
  3. 发布:其实应叫发布与回撤,内容发布之后也应有相应的回撤机制,因为安全问题很多网站支持把内容发布为静态HTML文件,这时候,就存在如果回撤一个文章的发布,需要同时删除对应的内容。
  4. 权限管理:内容的阅读权限、通用管理系统的权限、栏目的管理权限、采、编、审、发的文档管理流程。
  5. 多种内容类型的处理:单页HTML文档、多页试HTML文档(HTML电子书)、图片序列、PDF、WORD、EXCEL 往往支持内容类型越多,说明CMS的能力越强。
  6. 对文当的阅读(多种设备上)、检索、评价、引用、打印、使用统计这些都是最基本但也是用户体验和最终应用的地方,所以一定要很好的考虑。
  7. 内容的分类、复用、复制、分发、互相之间基于多种模式的链接。
  8. 与其他系统的互通性:博客、电子商城、统一用户认证系统、微信等。
  9. 与CMS系统并立的系统(互不包含):OA系统,ERP系统、CRM系统、电子商城系统
如果你对这篇文章有什么建议与意见,可以提出来,我一定会回复您。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
创建了一个使用实体框架和SQL Server Express LocalDB来存储和显示数据的简单Web应用程序. 实现了基本的CRUD和排序、筛选、分页及分组功能. using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Linq; using System.Net; using System.Web; using System.Web.Mvc; using ContosoUniversity.DAL; using ContosoUniversity.Models; using PagedList; namespace ContosoUniversity.Controllers { public class StudentsController : Controller { private SchoolContext db = new SchoolContext(); // GET: Students //public ActionResult Index() //{ // return View(db.Students.ToList()); //} /* step1 public ActionResult Index(string sortOrder) { ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : ""; ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date"; var students = from s in db.Students select s; switch (sortOrder) { case "name_desc": students = students.OrderByDescending(s => s.LastName); break; case "Date": students = students.OrderBy(s => s.EnrollmentDate); break; case "date_desc": students = students.OrderByDescending(s => s.EnrollmentDate); break; default: students = students.OrderBy(s => s.LastName); break; } return View(students.ToList()); } */ /*step2 public ViewResult Index(string sortOrder, string searchString) { ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : ""; ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date"; var students = from s in db.Students select s; if (!String.IsNullOrEmpty(searchString)) { students = students.Where(s => s.LastName.Contains(searchString) || s.FirstMidName.Contains(searchString)); } switch (sortOrder) { case "name_desc": students = students.OrderByDescending(s => s.LastName); break; case "Date": students = students.OrderBy(s => s.EnrollmentDate); break; case "date_desc": students = students.OrderByDescending(s => s.EnrollmentDate); break; default: students = students.OrderBy(s => s.LastName); break; } return View(students.ToList()); } */ public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page) { ViewBag.CurrentSort = sortOrder; ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : ""; ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date"; if (searchString != null) { page = 1; } else { searchString = currentFilter; } ViewBag.CurrentFilter = searchString; var students = from s in db.Students select s; if (!String.IsNullOrEmpty(searchString)) { students = students.Where(s => s.LastName.Contains(searchString) || s.FirstMidName.Contains(searchString)); } switch (sortOrder) { case "name_desc": students = students.OrderByDescending(s => s.LastName); break; case "Date": students = students.OrderBy(s => s.EnrollmentDate); break; case "date_desc": students = students.OrderByDescending(s => s.EnrollmentDate); break; default: // Name ascending students = students.OrderBy(s => s.LastName); break; } int pageSize = 6; int pageNumber = (page ?? 1); return View(students.ToPagedList(pageNumber, pageSize)); } // GET: Students/Details/5 public ActionResult Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Student student = db.Students.Find(id); if (student == null) { return HttpNotFound(); } return View(student); } // GET: Students/Create public ActionResult Create() { return View(); } // POST: Students/Create // 为了防止“过多发布”攻击,请启用要绑定到的特定属性,有关 // 详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=317598。 [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create([Bind(Include = "LastName,FirstMidName,EnrollmentDate")] Student student) { try { if (ModelState.IsValid) { db.Students.Add(student); db.SaveChanges(); return RedirectToAction("Index"); } } catch(DataException /* dex */) { //Log the error (uncomment dex variable name and add a line here to write a log. ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator."); } return View(student); } // GET: Students/Edit/5 public ActionResult Edit(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Student student = db.Students.Find(id); if (student == null) { return HttpNotFound(); } return View(student); } // POST: Students/Edit/5 // 为了防止“过多发布”攻击,请启用要绑定到的特定属性,有关 // 详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=317598。 [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(Include = "ID,LastName,FirstMidName,EnrollmentDate")] Student student) { if (ModelState.IsValid) { db.Entry(student).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } return View(student); } // GET: Students/Delete/5 public ActionResult Delete(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } //if (saveChangesError.GetValueOrDefault()) { // ViewBag.ErrorMessage = "Delete failed. Try again, and if the problem persists see your system administrator."; //} Student student = db.Students.Find(id); if (student == null) { return HttpNotFound(); } return View(student); } // POST: Students/Delete/5 [HttpPost, ActionName("Delete")] [ValidateAntiForgeryToken] public ActionResult DeleteConfirmed(int id) { Student student = db.Students.Find(id); db.Students.Remove(student); db.SaveChanges(); return RedirectToAction("Index"); } protected override void Dispose(bool disposing) { if (disposing) { db.Dispose(); } base.Dispose(disposing); } } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值