MVC学习笔记
IT职场新人一枚,入职头两天研发部的BOSS就交代了安装环境和需要自学的内容,给我的感觉就是在学校里学的是数学(工具),但是到公司里做项目则更像让你解物理题,你得学全新的公式(框架),起初着实让我头疼...不过既然选择了这行心里就有了准备,新的知识新的挑战什么的,尽管来就是了;努力抗住最难熬的这段时间,养成好的学习习惯,才是最重要的~~~
自学了几天MVC了,按着事例照着敲了一遍在MVC框架下增删改查的DEMO,这里整理下笔记,与大家分享下,同时也希望有大神能指点一二,特别是MODEL,CODE First 下的实体类和XML文件及Config文件的配置问题。
以下的例子是建立.edmx文件,用的是DBFirst连接的数据库,把种种我弄不清的问题都先交给VS自己解决了,先上手能敲出点东西为先,可能会马上参加进项目组写东西~~
原理笔记:(转自邹老师的公开课笔记)
1.MVC设计模式Model 是指 要处理的业务代码和数据操作代码View 视图 主要是指的 跟用户打交道 并能够展示数据Controller 看成是 Model和View的桥梁优点:1.1.可以降低 Model(业务/数据) 和 视图(视图) 的耦合关系1.2.可以复用视图(同样的数据,可以使用不同的视图以 不同的图标展示出来!)2.DotNetMVC 框架:约定大于配置2.1控制器类命名 以 Contoller结尾:HomeController2.2控制器类将会产生一个 与之同名的 在Views文件夹下的 文件夹:~/View/Home2.3控制器里的 Action方法,也可在视图文件夹下生成一个同名的视图,如:Index.cshtml3.EF(EntityFrameWork)ORM(对象关系映射框架/ 数据持久化框架)根据 实体对象 操作 数据表中数据的一种面向对象的操作框架。底层也是调用 Ado.Net
首先,强调一点MVC中的MODEL区别于3层架构中的业务实体层,MVC中的Model 是指 要处理的业务代码和数据操作代码,直白的说代码写在Control里。
先连接数据库好了,做增删改查离不开数据库。
1.新建一个项目,WEB里选择MVC4.0应用程序。
2.在自动生成的MODEL文件夹下添加一个数据下的ADO.NET实体数据模型。
3.选择从数据库生成(数据库生成为DBFirst,空模型则为MODEL/CODE First)不管用这样的生成了先。
4.选择数据库,这里最爽的就是实体连接字符串自动生成(自己写要头不知道怎么写....)
(完成之后可以在
中自动生成连接字符串这里可以先看看)
*要注意的是这里的name必须与数据库的名字一致
尝试着自己写过连接SQL的字符串,基于CODEFirst的编码,不清楚是XML文件还是Config文件出了错,不能对数据库进行操作....
对了,还有就是我的教训:在DBFirst和Code/ModelFirst两种之间只能选择一种,否则会产生冲突,导致结果出不来。
5.选择要对数据库操作的表,勾选单复数形式,完成,就OK了。
至此,连接数据库的问题解决了,就等于是解决了问题的大头了....(这里希望有大神能教一下Code/ModelFirst 模式下的代码编写 就是实体类的映射文件都自己配的写法 能举个例子就好~让我知道代码该写哪 该注意什么)
然后就是开始代码部分了:
1.新建一个空的控制器HomeController,控制器的命名规范是约定好的 Controller部分是无法被修改的(这里有个约定大于配置的原则)
2. 控制器中有很多Action方法 默认生成的是Index方法,而每个Index方法下都可以选择生成一个View(视图)
业务逻辑写在控制器里,视图呢只负责与客户交互,通过URL可直接访问指定的视图,为了区分开我写了两个ACTION方法
index 和 index2 并为两个方法生成了两个不同的视图
(*这里约定大于配置的原则又得到体现了,创建的HomeController控制器,的同时默认的在views文件夹下生成了一个home文件夹,当中存放的视图,是匹配homeController控制器中的各个Action方法的 这里一目了然~~~)
想要直接访问两个view 可以直接通过修改url来访问
试试看http://localhost:1839/index2 这个地址就指代不明确导致访问不了页面的,或者说根本就没这么个路劲的视图存在
localhost:XXXX/这段自动生成我们不管,看看后面 home控制器下的index方法中生成的同名视图
这里就可以理解,控制器是数据和视图之间交互的桥梁这句话了~
控制器中的方法就是数据处理和业务逻辑,而该方法中如有生成的视图,则这个方法会调用生成了的该视图
这里增删改查的DEMO 只在弄清,业务逻辑代码写在哪,大概要注意哪些编码规范;至于在项目中要怎么去写(啊~~~目前正着手的项目,框架已经搭好了,我只是对某个页面的业务逻辑和表现做修改,业务逻辑怎么处理啊....改掉了很多字段新增了很多字段,怎么用啊~~~怎么用啊~~~诶 还是没什么头绪啊....纠结啊.... 好了 吐槽完了 接着做正事)
//这里查询修改的都是在home页面下完成的,只需要在index方法下生成视图,至于修改,删除什么的,只需要知道执行成功没有,然后再更新视图,所以这里只需要在index下生成视图就O了;
//这里的数据都是通过引用下面两个命名空间中的entity 即EF来存放和传递的(公司的代码用的是NHibernate框架的所以代码实现多少有些不一样....这里也是最让我头疼的,下一阶段就是学NHibernate框架了 =-= 没办法 职场新人最开始的几个月总是很难熬的,咬着牙坚持吧,也希望期间能练成一套自己的学习方法 受用终身啊~有木有~)
//using System.Data.Entity;
//using System.Data.Entity.Infrastructure;
//using MVCBlog.Models;--以下引用的实体类,这个命名空间很有必要的;
public ActionResult Index()
{
//Model 是指 要处理的业务代码和数据操作代码,区别于3层中的Model层是对象实体层;
//查询数据库中的文章数据(通过EF执行)
//使用sqo标准查询运算符
//IQueryable<Models.BlogArticle> query = (IQueryable<Models.BlogArticle>)db.BlogArticle.Where(d => d.AIsDel == false) as IQueryable<Models.BlogArticle>;
//List<Models.BlogArticle> list = db.BlogArticle.Where(d => d.AIsDel == false).ToList();
//使用linq语句查询,并将查询的结果存放到list中
List<Models.BlogArticle> list = (from d in db.BlogArticle where d.AIsDel == false select d).ToList();
//将集合数据传送给视图,数据传递有两种方式
// a. viewbag传递
// b. viewdata传递
ViewData["DataList"] = list;
//加载视图
return View();
}
//既然加载视图了 就进视图看看 里面写了啥
//引用命名空间,看出来神马木有,在视图上@后面的代码,你可以按照后台代码的编写规范来,比起繁琐的标记语言爽多了啊~
@using MVCBlog.Models
//都没有用到viewbag这句其实可以干掉,是生成视图时自动生成的代码;
@{
ViewBag.Title = "Index";
}
可以把视图当成3层里面的UI层,只是代码编写上更方便,同时也更有技巧,慢慢练吧~
<html>
</head>
<body>
<table id="tbList">
<tr>
<th>id</th>
<th>标题</th>
<th>分类</th>
<th>状态</th>
<th>时间</th>
<th colspan="2">操作</th>
</tr>
<!-- 遍历集合数据 生成html代码-->
@foreach (BlogArticle a in ViewData["DataList"] as List<BlogArticle>)
{
<tr>
<td>@a.AId</td>
<td>@a.ATitle</td>
<td>@a.BlogArticleCate.Name</td>
<td>@a.Enumeration.e_cname</td>
<td>@a.AAddtime</td>
<td><a href="javascript:del(@a.AId)">删除</a></td>
<td><a href="/home/modify/@a.AId">修改</a></td>
</tr>
}
</table>
</body>
</html>
OK 现在主页加载的时候就会自动加载数据库中的数据啦~
增删改的大体思路一致,就偷个懒啦~嘻嘻
关于学习资料的分享:
1.codeplex中的musicstore的源代码照着敲一遍,这个是modelfirst,可能写起来有些麻烦
2.还有就是传智播客的MVC公开课,邹华栋老师很激情啊~赞一个,地址:额.... 忘了 大家搜一下就好啦~
总结下:
大体的思路,在控制器中写方法,要查询,增加,删除,更新?whatever 一个ACTION里面写一个功能 然后又必要就生成视图咯
然后CONTROLLER中的ACTION方法,无非就是和过去3层里面的代码大同小异,只是有写语法,比如LINQ语句和EF框架下的数据处理的机制
都要学习,视图就是HTML代码写法咯,
讲的很宽泛也很浅,只是整理了MVC下分析代码和编写代码的思路,至于具体实现,今后还有很长的路要走啊~
所以各位新人(包括我)慢慢努力啦~

浙公网安备 33010602011771号