首页 > 代码库 > 从零开始学习MVC(一)

从零开始学习MVC(一)

      其实在学校时,已经开设了MVC这门课程,教材由授课老师自己编纂,是和微软的音乐商店相似的一个书店项目,当时无法理解 Linq、Lambda , 只记得是按照老师的方法,复制+粘贴,不明其意,亦不知其理。心里模糊有个印象,后来在顶岗实习时候接触的(GIS)地理测绘方面的开发维护,直到换工作转正后,趁着为后期开发作技术储备的机会,好好从头开始学习一下MVC

     MVC是一种高级架构模式,由于先学习的Web Form,刚开始总觉的MVC 的显示分离增加了应用程序的复杂性,很不好用。当时真是鼠目寸光。没有见识到 -模型-视图-控制器- 的强大之处。分层、简洁、易于维护

     模型:一组实体类,可以理解为“数据层” 。 视图:定义用户显示的界面,被控制器来指定。  控制器:访问指引处,用来处理来自用户的请求,以及整个应用程序流的通信

下面记一个简单的表格操作,最后的效果图如下:

技术分享

 

关于上面这个Demo,分三部分介绍:

1.CSS樣式引用

   ① 在MVC中,若引用了模板页,会在默认的模板页中看到  @Styles.Render("~/Content/css") ,这里是引用CSS样式配置源,在 文件夹 App_Start 下找到 BundleConfig.cs , 点开后找到  

 bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/Site.css"));

没错这里就是引用的CSS样式表,如果此时需要引用 bootstrap.min.css 样式,直接以 Include("","",...)的形式加入进去,只是需要注意的是,这里浏览器进行编译时,无法识别此css文件,只有将 min 去掉,如重命名 bootstrap.css 才可以

   ② 此时,浏览器编译后的界面如下

技术分享

2.分页控件

    ①下载并安装网上开源的分页控件的Nuget包,在控制器界面引用控件的命名空间 using Webdiyer.WebControls.Mvc;

    ②同样在视图界面引用命名空间,还需引用@model PagedList<实体类名(表名)>

    注:视图界面只允许存在一个@model 的引用,如果之前选择创建强类型视图,需要注释此强类型部分,然后再添加@model 项目名.Models

3.增删该查

   增删改查是对数据最基础的操作,归根结底,也仍然是离不开参数的传递,以编辑为例子, 当前台点击编辑时,传递该学生的 id ,并提交到设定的控制器中,控制器接收参数,进行判断,然后返回编辑界面的视图,编辑界面点击保存,传递学生对象到控制器,控制器再根据Linq完成对数据的操作,返回主视图

编辑: 

 ① 在主界面的视图页中,编辑功能下传递当前选中行的学生id,

 跳转格式: @Html.ActionLink("连接文本", "方法","参数")
@Html.ActionLink("編輯", "Edit", new { id=item.Stu_id})

 ② 在对应的控制器下,接收视图传递进来的学生id ,进行判断,若有值,则返回至编辑视图

       //全局變量 數據對象        private IBBCEntities db = new IBBCEntities();        //        // GET: /Default1/Edit/5        public ActionResult Edit(int id)        {            Students students = db.Students.Find(id);            if (students == null)            {                return HttpNotFound();            }            return View(students);        }

 ③ 在编辑视图中,添加提交按钮  <input type="submit" value="http://www.mamicode.com/Save" />

    设置 Post 的请求方式 @using (Html.BeginForm("Edit","Default",FormMethod.Post))  { <></>... }

    其中Html.BeginForm("方法名", "控制器名", "请求方式")

    也可以写成 @using (Html.BeginForm()) { @Html.ValidationSummary(true)  <></>....  }

    这种写法,使用的是默认方式(自动提交到对应控制器下的同(类)名的并且带有[HttpPost]方法下,且提交方式为 post)

 ④ 在后台控制器中,利用 Linq 来操作数据,完成后仍返回主视图

        [HttpPost]        public ActionResult Edit(Students students)        {            if (ModelState.IsValid)            {                db.Entry(students).State = EntityState.Modified;                db.SaveChanges();                return RedirectToAction("Index");            }            return View(students);        }

 作了一个编辑的说明,只要稍稍了解过 Linq ,就不难想出 创建、删除、查看的方法

 对于删除,传递的id ,即根据id(主键)来执行删除操作,思路:查询由视图传提交来的id 的学生对象,然后删除对象,保存

        // POST: /Default1/Delete/5        [HttpPost, ActionName("Delete")]        public ActionResult DeleteConfirmed(int id)        {            Students students = db.Students.Find(id);            db.Students.Remove(students);            db.SaveChanges();            return RedirectToAction("Index");        }

对于创建,先验证添加的对象是否合理,合理:添加,保存。

       // POST: /Default1/Create        [HttpPost]        public ActionResult Create(Students students)        {            if (ModelState.IsValid)            {                db.Students.Add(students);                db.SaveChanges();                return RedirectToAction("Index");            }            return View(students);        }

 

 

权当作学习记录

 

从零开始学习MVC(一)