M是指业务模型,V是指用户界面,C则是控制器
MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式: [1]
Model(模型)表示应用程序核心(比如数据库记录列表)。
View(视图)显示数据(数据库记录)。
Controller(控制器)处理输入(写入数据库记录)。
MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。
MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。
BLL 业务逻辑层
屏幕录像专家
EF Power Tools CTP1
人才网三层架构搭建
三层架构+ASP.NET MVC3架构
安装Entity Framework(管理解决方案程序包)
使用后,发现一个问题
在进行Reverse Engineer Code First时
会出现
参数错误。(异常来自HRESULT:0x80070057)
如何解决呢,查过网络上一些解决办法,都没办法解决我的问题
后来才发现是目标框架问题(我使用的框架是4.5.2)
删除 C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET files 文件夹
删除C:UsersLEAppDataLocalTemp/Temporary ASP.NET files 文件夹
修改连接属性中的高级属性Integrated Security为True
修改连接属性中的高级属性Persist Security Info为True
点击项目属性,对目标框架进行修改,修改为.NET Framework 4.5.1
一些视频中不符的做法,添加引用Entity Framework
实际,我本人是没找到的
可以在Nuget-解决方案中添加Entity Framework
关于添加mdf文件创建数据库
1.在对象资源管理器中找到“数据库”,右键单击,选择“附加”
2.在附加数据库对话框中点击“添加”
3.附加数据库中出现选中的mdf文件数据库,点击“确定”
Linq to Sql
Linq to Entities
Entity Framework(简称EF,实现数据接口)
添加EF的几种方式:
直接创建MVC3 Internet应用程序(前提要求安装了相应的EF及相关插件)
直接找到EntityFrameWork.dll(注意版本要求是1.1),手工添加引用到项目中
采用NuGet方式安装
分成三层,web,DAL(数据访问层),BLL(业务逻辑层,起中转作用)
Web引用BLL和DAL和Entity
DAL引用Entity
BLL引用DAL和Entity
MyJob.DAL.Entities.C_Provinces
定义模型类,将类映射到数据库中表
嵌入式数据库
包含视图的MVC5控制器(使用Entity Framework)
可以进行创建、读取、更新、删除、列出(增删改查),包含Razor视图
模板,模型类
添加控制器Mvc5时,出现错误(运行所选代码生成器时出错)
管理解决方案的NuGet程序包
添加Entity Framework
添加EntityFramework.SqlServerCompact
找不到数据库位置
最终在SQL Server对象资源管理器中找到……
没有连接串的情况:
默认情况下,未指明时,EF Code First将在SQL Express中创建一个与DbContext同名的数据库
显示指定连接字符串:
在web.config中增加一个连接串设备来显示指定,连接串的名字需要匹配DbContext类的名字。默认景象下,EF将会查找同名的连接串来决定数据库的位置
Control层作用:
1.决定与“用户”沟通的渠道
2.决定系统运作的流程
3.负责从Model中获取数据
4.决定显示哪个View视图
5.在发生错误时选择适当的View进行响应
View层:
主要作用:输出和接受用户的输入
三者之间的关系:
Http->Control->Model->View
既关联又独立
自动生成代码,将实体以及存储逻辑混合在一起
Linq to Sql
Linq to Entity
缺点:
编写测试,无法拆分单独测试;
调试Bug中,不容易调试
asp.net Respositories(库模式)
针对接口编程,使程序代码可以实现最大程度的扩展
方便ASP.NET.MVC的单元测试
为后期实现IOC控制反转打下基础
添加时的一个麻烦,一直打不开文件夹
解决:显示所有文件
@Url.Content()
暂时修改了MyJob.DAL下HuilianJobContext的命名空间namespace MyJob.Entity.Models为namespace MyJob.DAL
接口里面不需要public
可枚举类型定义
public enum LoginStatus
{
Success,Failed,Locked
}
Trim()作用:
去掉字符序列左边和右边的空格,不去除字符序列中间的空格
str=” I will”;
str=Trim(str);
这时候str=”I will”;
style=”background:url(文件路径):95px;height:30px;”
远程验证,通过属性标签进行定义
在MyJob.DAL中添加引用System.Data.Entity
因为有所不同,在根据登录的用户名来获取个人会员实体时,要从Entity.Models中获取
Configuration(配置)
viewbag特点:
是从controller向view传值用的(动态类型)
不再是字典的键值对结构,而是动态结构,会在程序执行的时候动态解析
是MVC3独有的,基于Asp.Net.Mvc4.0和net framework
在viewpage中查询数据时不需要类型转换
可读性好
Control",简称IoC。也许有人不快习惯这样的开发方法,但在规划较大的软件架构时,这种方法却可以有效降低类之间互相依赖的情况,不但能增加架构的弹性,也能有效降低软件的复杂度。
如果不考虑控制反转的情况,采用比较直接的开发方式,当然是不用先建立接口而直接建立类,然后直接在应用层中调用即可。如此一来,应用层的对象就会与BLL层对象高度相依。这样的相依性会导致这两个类无法拆开。为什么要拆开这两个类呢?由于单元测试是软件测试的最小单位,所以如果日后导入单元测试,那么这种两个类彼此相依的状况就会导致单元测试难以进行。
为了避免应用层对象与BLL层对象或BLL层对象与DAL层对象产生相依性,我们需要替BLL层对象加上一个IBLL接口,而在应用层对象中则可以通过IBLL接口来执行BLL对象的动作。但即使是这样,BLL对象与应用层对象的相依性还是存在,因为在应用层对象构造符处还是需要建立实体的BLL对象,如 IBLL _bll = new BLL();
为了解决耦合度问题,引入了控制反转IoC。目前网络上可以使用的控制反转容器有很多,例如微软的Unity、Castle Windsor、Autofac、StructureMap等都拥有广大的支持者。下面就简单介绍我在项目中运用的Autofac,也是目前性能比较好的控制反转容器之一。
关于Global.asax文件的一些解释:
Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法。你可以使用这个文件实现应用程序安全性以及其它一些任务。
Global.asax 位于应用程序根目录下。
虽然 Visual Studio .NET 会自动插入这个文件到所有的 ASP.NET 项目中,但是它实际上是一个可选文件。删除它不会出问题——当然是在你没有使用它的情况下。
.asax 文件扩展名指出它是一个应用程序文件,而不是一个使用 aspx 的 ASP.NET 文件。
Global.asax 文件被配置为任何(通过 URL 的)直接 HTTP 请求都被自动拒绝,所以用户不能下载或查看其内容。
ASP.NET 页面框架能够自动识别出对Global.asax 文件所做的任何更改。在 Global.asax 被更改后ASP.NET 页面框架会重新启动应用程序,包括关闭所有的浏览器会话,去除所有状态信息,并重新启动应用程序域。
Mvc转换
Html.
用户自定义局部视图(创建视图布局页)
region 用户自定义局部视图
[ChildActionOnly]
public ActionResult Header()
{
return View();
}
[ChildActionOnly]
public ActionResult Footer()
{
return View();
}
[ChildActionOnly]
public ActionResult Left()
{
Per per = Session["user"] as Per;
ViewBag.PerId = per.PerId;
return View();
}
[ChildActionOnly]
public ActionResult Navigator(int tag) {
return View(tag);
}
#endregion
@{Html.RenderAction(“分布视图名”,”分布视图”);}
regexp
正则验证
regexp
正则验证
TempData(取出即消失)
js写法(写在页面开头)
@section HeaderSection{
 (空格占位符)
MyJob_2018MyJobScripts下的GetCode.aspx中的
3.controller