初学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控制器就新建好了,自动给我们生成好了整个框架

View Code
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的数据。同时也能使用模板页,继承它的样式等。
这里,我们基本要建的文件都建好了,三层之间的关系也基本都联系起来了,第一天实习就是这么过来的。下次我就结合自己的实际讲讲怎么实现具体的增删改操作,希望对大家有帮助。好不好大家都可以和我交流交流促进我学习进步。




posted @ 2012-06-25 15:27  然嗄  阅读(3067)  评论(0编辑  收藏  举报