初学asp.net mvc3.0 —— 实现文章内容的增删改
由于期末考试复习什么的,好久没更新博客了,今天没什么事,就将近几天来第一家公司实习,在试用期自己学的一些mvc3.0的东西和大家分享一下,希望对和我一样初学者有些帮助,也希望前辈们能给予提点,在此先谢过!
之前还没实习的时候很想学mvc,但是看了些资料,感觉水好深,就没坚持看下去。就知道mvc就是model,view和contorl的简称,也就是模型,视图和控制器。这里给新手们推荐个入门的好博文——张子秋的博客(http://www.cnblogs.com/zhangziqiu/archive/2009/02/27/aspnet-mvc-1.html)。对我对基本的概念了解帮助还是挺大的。
刚来公司,由于我说之前没有mvc的学习经验,就做过写asp.net的程序开发经验。于是项目经理给我布置了个任务,就是实现文章内容的增删改操作,已经列表分页,然后再实现按类别筛选,最后将做好的这些改成ajax的无刷新数据获取和提交,给的时间是5到10天(当时听了压力还是有点大的,完成不了就实习机会都没了,毕竟自己还是在校生)。于是,就静下心来开始找资料学习。下面我就给大家说说这几天我都是怎么过来的吧。
第一天基本就是这样过的,早上重装了电脑,公司装的还是英文版的,好高级诶,第一次用英文版的系统呢。装完系统要自己启动下IIS服务,不然到时候VS中的程序就执行不了了。Windows7中IIS简单安装与配置(详细图解):http://ons.me/147.html
然后装了VS2010和SQL2008。之后要自己下载安装AspNetMVC3ToolsUpdateSetup.exe,这个是创建mvc程序必须要安装的,可以自己去微软官网下载,下载地址如下:http://www.microsoft.com/zh-cn/download/details.aspx?id=1491 自行下载并安装。安装完后重启VS2010即可。
这么一搞就到吃饭时间了。下午就找了些新建asp.net mvc3.0项目的例子,以及了解了下三个层之间是怎么联系的。在新建mvc3.0项目的时候也出现过问题,错误提示是:The provider did not return a ProviderManifestToken string.原因好像是我建的是空的项目,controllers文件夹中没有control,导致在启动的时候,Global.asax文件中设置的路由找不到默认的显示页面。
首先,我先在SQL Server2008中建了个数据库,
数据库结构图
然后在VS2010中新建项目,命名为AtricleManagerSystem ,在Models文件夹中添加项,在数据栏中选建ado.net 实体数据模型。
创建实体数据模型
选“从数据库生成”——下一步
选择刚才新建的数据库新建连接——下一步
将要显示的表,视图都勾上,然后点完成。这样就建好实体数据库模型了。
双击建好了article.edmx文件
显示出来了表的字段和关系。
接下来我们要做的就是建control控制器了。选中Controllers文件夹——添加——Controller
三个的区别是建好的control中默认建的函数不同,选空的话一般就是
public class Default1Controller : Controller { // // GET: /Default1/ public ActionResult Index() { return View(); } }
这个是最简单的Control,就是返回一个视图。默认是Default1是控制器的名称,Index是他里面的方法(每个控制器名称在Views文件夹中对应一个文件夹,每个方法就是该文件夹下的一个视图)
这里我们选第二种,新建好的控制器中默认写好了基本的增删改方法的框架,在建控制器的时候,我们要选择对应的model,及这里的model class
这边显示的News就是我们之前建好的那个Model文件夹中article.edmx文件,及数据库实体模型中的News表,同个他,我们能获取数据库中的表中的字段数据等,起到连接的作用。下面的data context选择新建数据实体模型时候实体对象的名称DB_articleEntities。点击Add添加,这样control控制器就新建好了,自动给我们生成好了整个框架
public class Default1Controller : Controller { private DB_articleEntities db = new DB_articleEntities(); // // GET: /Default1/ public ViewResult Index() { var news = db.News.Include("Type"); return View(news.ToList()); } // // GET: /Default1/Details/5 public ViewResult Details(int id) { News news = db.News.Single(n => n.ID == id); return View(news); } // // GET: /Default1/Create public ActionResult Create() { ViewBag.Typeid = new SelectList(db.Types, "Typeid", "TypeName"); return View(); } // // POST: /Default1/Create [HttpPost] public ActionResult Create(News news) { if (ModelState.IsValid) { db.News.AddObject(news); db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.Typeid = new SelectList(db.Types, "Typeid", "TypeName", news.Typeid); return View(news); } // // GET: /Default1/Edit/5 public ActionResult Edit(int id) { News news = db.News.Single(n => n.ID == id); ViewBag.Typeid = new SelectList(db.Types, "Typeid", "TypeName", news.Typeid); return View(news); } // // POST: /Default1/Edit/5 [HttpPost] public ActionResult Edit(News news) { if (ModelState.IsValid) { db.News.Attach(news); db.ObjectStateManager.ChangeObjectState(news, EntityState.Modified); db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.Typeid = new SelectList(db.Types, "Typeid", "TypeName", news.Typeid); return View(news); } // // GET: /Default1/Delete/5 public ActionResult Delete(int id) { News news = db.News.Single(n => n.ID == id); return View(news); } // // POST: /Default1/Delete/5 [HttpPost, ActionName("Delete")] public ActionResult DeleteConfirmed(int id) { News news = db.News.Single(n => n.ID == id); db.News.DeleteObject(news); db.SaveChanges(); return RedirectToAction("Index"); } protected override void Dispose(bool disposing) { db.Dispose(); base.Dispose(disposing); } }
同时,我们发现在新建了Control同时,Views文件夹中多了个文件夹及文件,这里就是上面说的了。(每个控制器名称在Views文件夹中对应一个文件夹,每个方法就是该文件夹下的一个视图)
如果我们要自己添加视图,那怎么添加呢?很简单,点击控制器中的方法,右击——选择Add View添加视图,下面的Go To View是跳转到该方法对应的视图。
创建视图的时候,可以选择Model,这样就能在该视图显示该model的数据。同时也能使用模板页,继承它的样式等。
这里,我们基本要建的文件都建好了,三层之间的关系也基本都联系起来了,第一天实习就是这么过来的。下次我就结合自己的实际讲讲怎么实现具体的增删改操作,希望对大家有帮助。好不好大家都可以和我交流交流促进我学习进步。