视频学习MVC

 

1.MVC设计模式
Model 是指 要处理的业务代码和数据操作代码 (和三层的的数据层不一样)
View 视图 主要是指的 跟用户打交道 并能够展示数据
Controller 看成是 Model和View的桥梁

优点:
1.1.可以降低 Model(业务/数据) 和 视图(视图) 的耦合关系
1.2.可以复用视图(同样的数据,可以使用不同的视图以 不同的图标展示出来!)

2.DotNetMVC 框架:约定大于配置

2.1控制器类命名 以 Contoller结尾:HomeController
2.2控制器类将会产生一个 与之同名的 在Views文件夹下的 文件夹:~/View/Home
2.3控制器里的 Action方法,也可在视图文件夹下生成一个同名的视图,如:Index.cshtml

3.EF(EntityFrameWork)
ORM(对象关系映射框架/ 数据持久化框架)
根据 实体对象 操作 数据表中数据的一种面向对象的操作框架。
底层也是调用 Ado.Net
SQO标准查询运算费.

感谢同学们昨晚坚持到那么晚~~~ :)一起加油!

ViewBag,ViewData,TempData区别?
ViewBag 和 ViewData 数据"共享",作用域为 当前 Action。
TempData 作用域跨 Action。

 OumindBlogEntities db = new OumindBlogEntities();

        #region 0.2 查询 文章 列表 +ActionResult Index()
        /// <summary>
        /// 查询 文章 列表
        /// </summary>
        /// <returns></returns>
        public ActionResult Index()
        {
            //1.查询 数据库里的 文章数据(通过 EF 执行)
            //1.1第一种方式:使用 SQO(标准查询运算符),查询 所有未软删除的文章
            //实际返回的 是一个 IQueryable 对象?此处其实是返回了一个 IQueryable接口的子类对象
            //IQueryable<Models.BlogArticle> query = db.BlogArticles.Where(d => d.AIsDel == false);
            //此时真实 返回的 类型为 DbQuery<T>,支持 延迟加载:只有当使用到数据的时候,才去 查询数据库!
            //DbQuery<Models.BlogArticle> query = (db.BlogArticles.Where(d => d.AIsDel == false)) as DbQuery<Models.BlogArticle>;
            //直接将 返回的 DBQuery转成  List<T>集合,也就是立即查询数据库,并返回查询到的集合
            //List<Models.BlogArticle> list = db.BlogArticles.Where(d => d.AIsDel == false).ToList();

            //1.2第二种方式:使用 Linq 语句,查询 所有为软删除的 文章
            // *Linq 仅仅是 给成员用的 语法糖,.Net编译器会在编译程序集(中间代码)的时候,将Linq语句 转成 SQO(标准查询运算符)
            List<Models.BlogArticle> list = (from d in db.BlogArticles where d.AIsDel == false select d).ToList();

            //2.将集合数据传给视图
            //ViewBag.DataList = list;
            ViewData["DataList"] = list;

            //3.“加载”视图
            return View();
        }
        #endregion

        #region 0.3执行删除操作(根据id) +ActionResult Del(int id)
        /// <summary>
        /// 执行删除操作(根据id)
        /// </summary>
        /// <param name="id">要删除的文章id - /home/del/12 </param>
        /// <returns></returns>
        public ActionResult Del(int id)//此id 会根据 路由的url配置{id}占位符 ,而被 12 替换掉
        {
            try
            {
                //1.创建要删除的对象
                BlogArticle modelDel = new BlogArticle() { AId = id };
                //2.将对象 添加到 EF 管理容器
                db.BlogArticles.Attach(modelDel);
                //3.将对象包装类的 状态 标识为 删除状态
                db.BlogArticles.Remove(modelDel);
                //4.更新到数据库
                db.SaveChanges();
                //5.更新成功,则命令浏览器 重定向 到 /Home/List 方法
                return RedirectToAction("Index","Home");
            }
            catch (Exception ex)
            {
                return Content("删除失败~~~" + ex.Message);
            }
        } 
        #endregion

        #region 0.4 显示要修改的数据 +ActionResult Modify(int id)
        [HttpGet]
        /// <summary>
        /// 0.4 显示要修改的数据
        /// </summary>
        /// <param name="id">要修改的文章的id</param>
        /// <returns></returns>
        public ActionResult Modify(int id)
        {
            //1.根据id 查询数据库,返回的集合中 拿到 第一个 实体对象
            BlogArticle art = (from a in db.BlogArticles where a.AId == id select a).FirstOrDefault();
            //2.生成 文章分类 下拉框 列表集合  <option value="1">文本</option>
            IEnumerable<SelectListItem> listItem = (from c in db.BlogArticleCates
                                          where c.IsDel == false select c).ToList()
                                          .Select(c=> new SelectListItem { Value = c.Id.ToString(), Text = c.Name });
            //将生成的文章分类 下拉框选项集合 设置给 ViewBag
            ViewBag.CateList = listItem;
            
            //List<SelectListItem> list;

            //3.将 art 传递 给 视图显示
            //ViewBag
            //ViewData
            //* “加载”视图,使用View的构造函数,将 数据 传给 视图上的 名为 Model 的 属性
            return View(art);
        } 
        #endregion

        #region 0.5 执行修改 +ActionResult Modify(BlogArticle model)
        [HttpPost]
        /// <summary>
        /// 0.5 执行修改
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public ActionResult Modify(BlogArticle model)
        {
            try
            {
                //1.将实体对象 a.加入 EF 对象容器中,并 b.获取 伪包装类对象
                DbEntityEntry<BlogArticle> entry = db.Entry<BlogArticle>(model);
                //2.将包装类对象的状态设置为 unchanged
                entry.State = System.Data.EntityState.Unchanged;
                //3.设置 被改变的属性
                entry.Property(a => a.ATitle).IsModified = true;
                entry.Property(a => a.AContent).IsModified = true;
                entry.Property(a => a.ACate).IsModified = true;

                //4.提交到数据库 完成修改
                db.SaveChanges();
                //5.更新成功,则命令浏览器 重定向 到 /Home/List 方法
                return RedirectToAction("Index", "Home");
            }
            catch (Exception ex)
            {
                return Content("修改失败~~~" + ex.Message);
            }
        } 
        #endregion
View Code

 

posted @ 2015-01-18 19:38  Benson07  阅读(90)  评论(0)    收藏  举报