其实在学校时,已经开设了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. NumPy 广播机制(Broadcasting)

    一.何为广播机制 a.广播机制是Numpy(开源数值计算工具,用于处理大型矩阵)里一种向量化数组操作方法. b.Numpy的通用函数(Universal functions) 中要求输入的两个数组sh ...

  2. vue项目使用vue-photo-preview插件实现点击图片放大预览和移动

    官方链接: http://npm.taobao.org/package/vue-photo-preview # 安装 npm install vue-photo-preview --save # 引入 ...

  3. 第 9 章 DOM 的增删改查

    DOM 的增删改查 本文不会详细讲解,只是简单提及知识要点,详细可以参考<dom高级编程>. 1. document.write document.write('<h1>创建节 ...

  4. python解析VOC的xml文件并转成自己需要的txt格式

    在进行神经网络训练的时候,自己标注的数据集往往会有数据量不够大以及代表性不强等问题,因此我们会采用开源数据集作为训练,开源数据集往往具有特定的格式,如果我们想将开源数据集为我们所用的话,就需要对其格式 ...

  5. SQL SERVER 2016研究二

    2.动态数据屏蔽 创建数据表: 创建账号并授予获取屏蔽后数据的权限 此函数:partial(0,"XXX-XXXX-",4) 表示从左边0位开始依次替换到倒数4位. 注意:屏蔽只作 ...

  6. 唯美MACD

    上证30 分钟产生背离,60 分钟高位,但并没有背离,若调整,也是30F 级别的.算是上涨途中的歇脚. 1.股票如果非要从MACD 上去判断怎么拿,那么一句话:要大跌,一般都需要背离.所以,没有背离的 ...

  7. MySQL 5.7 传统复制到GTID在线切换

    来源:http://wubx.net/ 联系方式: wubingxi#163.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究. 前题: 要求MySQL 5.7.6及以后版本. 所有组 ...

  8. python实现根据当前时间创建目录并输出日志

    举个例子:比如我们要实现根据当前时间的年月日来新建目录来存放每天的日志,当前时间作为日志文件名称:代码如下: #!/usr/bin/env python3 # _*_ coding: utf-8 _* ...

  9. redis.conf密码设置的问题

    requirepass是终端客户端登录需要的密码,配置在服务端 masterauth是从服务器端登录master端需要的密码,配置在从服务端

  10. 使用SBT构建Scala应用【转载】

    使用SBT构建Scala应用 SBT简介 SBT是Simple Build Tool的简称,如果读者使用过Maven,那么可以简单将SBT看做是Scala世界的Maven,虽然二者各有优劣,但完成的工 ...