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

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

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

Razor语法:易于输入,支持所有的文本编辑器、智能感应、自识别@邮箱/@属性

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

关于上面这个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="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);
}

对于以上操作,实际上在项目中是根本不会直接拿过来用的,对于CURD这些操作,往往是先定义好仓储接口,然后用对应的实体接口去继承,再去基类中实现这些方法,最后在逻辑中调用。可直接传入对应的实体和方法名,即可完成逻辑操作。针对传统的DBhelper操作而言,不用每每实现一个数据库的功能都要去手写sql语句。尤其对于大项目而言,频繁的手写sql语句,浪费大量的时间和精力。

权当作学习记录

从零开始学习MVC的更多相关文章

  1. 从零开始学习ASP.NET MVC 1.0

    转自:http://www.cnblogs.com/zhangziqiu/archive/2009/02/27/ASPNET-MVC-1.html <从零开始学习ASP.NET MVC 1.0& ...

  2. 系列文章--从零开始学习ASP.NET MVC 1.0

    从零开始学习ASP.NET MVC 1.0 (一) 开天辟地入门篇 从零开始学习 ASP.NET MVC 1.0 (二) 识别URL的Routing组件 从零开始学习 ASP.NET MVC 1.0 ...

  3. ASP.NET从零开始学习EF的增删改查

           ASP.NET从零开始学习EF的增删改查           最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...

  4. 从零开始学习jQuery (一) 入门篇

    本系列文章导航 从零开始学习jQuery (一) 入门篇 一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些 ...

  5. 从零开始学习jQuery(转)

    本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery ( ...

  6. 从零开始学习jQuery (一) 开天辟地入门篇

    一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 本篇文章是入门第一篇, 主要是简单介绍jQuer ...

  7. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  8. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(四)-创建Controller

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(四)-创建Controller 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...

  9. 从零开始学习jQuery (五) 事件与事件对象

    本系列文章导航 从零开始学习jQuery (五) 事件与事件对象 一.摘要 事件是脚本编程的灵魂. 所以本章内容也是jQuery学习的重点. 本文将对jQuery中的事件处理以及事件对象进行详细的讲解 ...

随机推荐

  1. 20165336 2017-2018-2《Java程序设计》第6周学习总结

    20165336 2017-2018-2<Java程序设计>第6周学习总结 教材学习内容总结 常量池中的数据在程序运行期间再也不允许改变. String s = new String(&q ...

  2. 【Python爬虫】BeautifulSoup网页解析库

    BeautifulSoup 网页解析库 阅读目录 初识Beautiful Soup Beautiful Soup库的4种解析器 Beautiful Soup类的基本元素 基本使用 标签选择器 节点操作 ...

  3. 关于javascript中defineProperty的学习

    语法 Object.defineProperty(obj, prop, descriptor) 参数 obj 要在其上定义属性的对象. prop 要定义或修改的属性的名称. descriptor 将被 ...

  4. rar压缩类

    using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; namespa ...

  5. sed命令 windows与linux换行

    Linux的Bash命令中有一个sed操作,SSD的create_list.sh中有用到这个操作: 结合着下面这个解释: 也就是删除所有行里面的以VOC2007/Annotations/(这里的\代表 ...

  6. Unable to cast COM object of type 'Shell32.ShellClass' to interface type 'Shell32.IShellDispatch6'.

    VS 里面的Interop.Shell32.dll(1.0) 这个版本太低了,需要高版本的(我使用的是1.2.107.0) 具体下载地址  自己找吧

  7. ls 命令查看文件时候,按修改时间倒序或升序排列

    1,按照时间升序 命令:ls -lrt 详细解释: -l use a long listing format 以长列表方式显示(详细信息方式) -t sort by modification time ...

  8. 小程序-formdata传参

    项目背景,后端接口要求formData传参: 在util.js文件中封装转化函数,代码如下: const formatTime = date => { const year = date.get ...

  9. webpack打包多个入口文件

    打包后的目录结构: webpack.config.js // path 模块提供了一些用于处理文件路径 const path = require('path'); // fs模块用于对系统文件及目录进 ...

  10. JS 8-1 OOP概念与继承

    function Foo(){ this.y=2; } typeof Foo.prototype; Foo.prototype.x = 1; var obj3= new Foo(); obj3.x; ...