Razor视力引擎(@{}((html中写)大括号中写C#代码)) EF(Entity Framework)框架html
MVC概述jquery
约定优于配置web
ASP.NET MVC 是基于ASP.NET的一款B/S架构应用程序设计的开发框架ajax
C((Controller)控制器:用来处理用户的请求(当用户请求一个url地址时会对url地址进行路由解析,对请求进行处理,(中转,控制,将业务逻辑交给Model))(选择一个视图))(提供视图和模型之间的协调程序。控制器负责处理输入,对模型进行操做,并决定执行哪个动做,如渲染一个视图,或是重定向另外一个页面,三者的关联)(响应用户输入,处理来自用户、应用程序业务逻辑的通讯)数据库
M((Model):(业务逻辑处理)(领域模型,描述了某项业务的处理))(封闭用户数据及业务操做逻辑的类,描述了要处理的数据及操做数据的业务规则)(领域模型(具备业务的模型、视图模型(View Model专一于用户界面上显示的模型)))编程
V(View):((最终给用户看的(就是一个动态的模板)(渲染html)))(定义了用户界面的显示方式,是动态生成HTML页面的模版)(模型的可视化表示,是框架渲染给浏览器的结果标记)设计模式
MVC优势:再也不维护视图状态;关注分离;有利于单元测试(更加符合http协议;把各个部分都分开,更加独立)(1 与协议更接近,MVC将一个请求映射成一个方法的调用(路由),再也不有复杂的页面的生命周期,(Web Form事件驱动,试图隐藏HTTP无状态的本质(页面生命周期复杂)) 2 关注分离,将用户界面(视图)与驱动界面的代码(控制器)保持分离,对控制器的修改不必定也要修改用户界面将原来Web Form页面内容和C#代码耦合在一块儿的状况完全改变,实现了页面内容和业务处理的完全分离,将原来的.aspx.cs中的代码搬到了控制器中 3 可测试性,控制器做为一个单独的类,能够独立测试)数组
控制器接受用户输入,构造适当的模型,而后将其传递给视图。控制器和视图对模型都有依赖性,但模型自己对控制器和视图是一无所知的浏览器
设计模式:GOF23安全
三层架构,MVC
框架:半成品(ASP.NET MVC)
着重在表示层
MVC工做环境
Controllers目录(全部的控制器)(每一个方法叫作动做(Action))
(Icontroller接口(Execute(RequestContext)方法))
(Models(数据注解))
Views(.cshtml(Shared(公共模板))(_ViewStart.cshtml))
命名规则 Controller包含两部分(前面是路由信息(Controller名称) 后面加上Controller(一个Controller对应一个文件夹 同名默认直接找到(也能够指定视图)))
Scripts(JS文件夹)()
Content目录(CSS和图片)
App_Start MVC运行的各类配置(RouteConfig(路由设置)(FilterCinfig(过滤器)))
Global.asax(全局应用程序类)(Application_Start())
约定与配置
原则:约定优于配置
Controllers、Models、Views目录分别保存控制器类、模型类与视图文件
每个Controller类均以Controller结束
每个控制器的视图均保存在单独的控制器名称目录下
模型绑定
控制器的操做(Action):控制器中的任何公共函数都公开为控制器操做。控制器方法不容许声明为表态(static)方法
控制器的默认方法:Index()
访问控制器指定的方法:
/xController访问Index方法
/xController/List访问List方法
比Controllers开始写
添加视图
Layout = null;不使用布局页
ViewBag(视图包)(动态视图数据字典)
能够用/传递参数
控制器基类方法
EmptyResult表明无结果
.View 返回 ViewResult((返回html代码)表明html和标记)(ActionResult)
.Redirect(建立一个重定向到指定的URL的System.Web.Mvc.RedirectResult对象) 返回 RedirectResult(表明从新定向到新的url)
.RedirectToAction(使用操做名称重定向到指定的操做) 返回 RedirectToRouteResult(表明重定向到新的控制器操做)
.RedirectToRoute(使用路由名称重定向到指定的路由) 返回RedirectToRouteResult(表明重定向到新的控制器操做)
.Json(建立JsonResult对象,该对象使用指定JSON请求行为将指定对象序列化为JavaScript对象表示法(JSON)格式) 返回JsonResult(表明能够在AJAX应用程序中使用的JavaScript Object Notation结果)
.Content 返回ContentResult(表明文本结果)
ActionResult是抽象类,实际返回的是由其派生类,可自由定义返回值的类型
View方法 若是没有参数,调用的是和动做同名的视图;若是有参数,按参数获取视图 return View(“~/Views/Home/Index.cshtml”)
Controller中为视图传递数据,能够用ViewBag(dynamic)(是对ViewData的封闭,支持强类型)和ViewData(放入的都变成了object类型)(ViewDataDictionary)(不支持强类型,须要强制类型转换)(名字中间能够有空格)
@**@(Razor的注释)
public ContentResult Content()
{
return Content("我是Content,我返回纯文本字符串");
}
public RedirectResult Redirect()
{
TempData["Name"] = "张张";//可用于临时在页面中传递数据,可是数据一旦读取一次后不能再读,能够在重定向中传递数据,不能使用ViewBag在重定向中传递数据
return Redirect("/Home/Index");
}
JsonRequestBehavior.AllowGet(容许GET请求,Json默认接收POST请求,不支持GET请求,不设置就不容许)
FileResult returnFile(使用文件名和内容类型建立一个FilePathResult对象)
Mime类型:(application/pdf)(向客户端发送pdf文件)
1 当咱们在浏览器中敲入一个url地址,回车后就向服务器发送一个请求,这个请求的url地址就会被MVC框架进行路由解析,会解析出你要访问哪个Controller,访问它下面的哪个Action以及参数信息,MVC框架会建立响应的Controller的实例,调用指定的Action方法,这时控制器可能须要进行业务处理,介是他不作实际的业务处理工做,他会交给Model或者(BLL)去作,最终他须要指定一个输出给用户响应;
2 响应能够有不少各,能够是html标记结果、文件、字符串、Json数据、重定向,若是想返回html标记须要使用return View(),返回的是与Action同名的视图;
3 ViewResult包含返回给用户的html标记,因此包含View的Action,须要建立响应的视图,return View(),返回的是与Action同名的视图,return View(“视图名称”),返回的是同一控制器下的视图,return(“/Views/控制器名称/视图名称.cshtml”),返回的是不一样控制器下的视图,若是想向视图中传入数据,可使用ViewBag、ViewData、TempData、对象(强类型的)(能够是Model类的实例,也能够是其余的类库中的类型)
(视图中的)@Model (dynamic WebViewPage<dynamic>.Model)
@model 命名空间名.Models.Student(用来引入强类型)
视图
ViewData:Key/Value字典集合;ASP.NET MVC1就有了;基于ASP.NET Framework 3.5;ViewData比ViewBag快;须要转换合适的类型;有一些类型转换代码
ViewData.Model = (一个Model);(设置页面的强类型数据)
ViewBag:dynamic类型对象;ASP.NET MVC3才有;基于ASP.NET Framework 4.0;ViewBag比ViewData慢;不须要类型转换;可读性更好
约定:默认视图名称与控制器中的方法名称相同
[HttpPost]:表示一个特性,该特性用于限制操做方法,以便该方法只能处理POST请求
在地址栏中直接输入(控制器/Action名称)是GET访问方式
当Action没有特性修饰时,默认以GET方式访问,加上[HttpPost]这个特性,限制该Action只经过Post方式访问(提交表单)
模型绑定(自动装配):须要咱们定义一个和表单对应的视图模型,方法的参数定义为该模型类的实例(form表单元素name中的值须要和模型的属性名称一致)
(form表单提交按name属性)
Razor视图引擎
做用:解释、执行视图中的代码
是默认视图引擎(MVC4可选)
@Model.Name
@(Model.Name)
@Html.Raw(Model.Message)(Html.Raw(返回不是HTML编码的标记)(后面不能写分号))
@{string y = ”name”;}(代码块中不能用混合编码)
@foreach (var item in items){
Item:@i.Name
}
@(Html.aMethod<aType>())
转义符:@@(电子邮箱一般不需转义便可正确识别)
代码块内部单行注释:// 多行注释:@**@
Razor引擎自动对变量中html代码进行html编码,能够防止JS的跨站攻击(防止脚本注入攻击)
@(变量名).html内容(小括号必须有)(@变量.info,Razor引擎认为info和变量是有关系的,这时须要使用())
/Views/_ViewStart.cshtml文件(在整个网站上应用布局)
@RenderBody()(布局页)
布局页中(@RenderSection(“Stu”)(在布局页中,将呈现指定部分的内容并指定该部分是否为必需)(就是一个占位符,须要视图中提供指定名称的@section,若是不提供的话,会报错,避免报错))
子页中(@Section Stu(和上面的一致) 分区段)
默认布局:_Layout.cshtml
@model在当前页面中指定 该页面指定的强类型信息 每一个页面只有一个
@Html.Partial(“分部视图名称(没有扩展名)”)
@{@Html.RenderPartial(“分部视图名称”);()
}
在主视图中传递的参数传递给了@Model
RenderPartial(没有返回值)
在控制器下用的分布视图能够用在对应视图文件夹下
ChildActionOnly 表示一个特性,该特性用于指示操做方法只应做为子操做进行调用
@Html.Action 调用指定子操做方法并以HTML字符串形式返回结果
MVC模型
可保存并操做应用程序数据
基架:能够为应用程序快速的建立增、删、改、查等功能
ORM:(对象关系映射(Object Relational Mapping))用于实现面向对象编程语言里不一样类型系统的数据之间的转换的一种程序技术
包括如下四部分:
一个对持久类对象进行CRUD操做的API
一个语言或API用来规定与类和类属性相关的查询
一个规定MAPPING METADATA的工具
一种技术可让ORM的实现同事务对象一块儿进行DIRTYCHECKING, LAZY ASSOCIATION FETCHING以及其余的优化操做。
EF:(Entity Framework) 是微软的一个ORM框架(是微软主推的数据存取技术,在实际开发中(ASP.NET MVC等)被用来构建应用程序的数据访问层)(用XML)
NHibernate
继承自DbContext(数据库访问上下文)
一个DbSet<>对应一张表
Find()方法
添加: 1 建立一个模型 2 建立一个上下文 3 添加一个实例 4 将实体添加到实体集合中去 5 将实体的变化映射到数据库中去
修改: 3 构造一个要修改的实体 4 将实体添加到实体集合中,告诉上下文管理该实体对象 Attach方法 5 告诉上下文该实体状态已经更改 System.Data. SaveChanges
删除: 3 在实体集合中找到要删除的实体 Find() 4 告诉上下文将删除的实体Remove() SaveChanges()
遍历表的所有数据
代码优先(Code First): 1 先构造实体模型(须要从新生成(必需)); 2 使用Entity Framework建立控制器; 3
IEnumerable(迭代接口)
ModelState.IsValid(模型绑定是否成功(true为成功))
?(可空的数据类型)
Return new HttpStatusCodeResult(HttpStatusCode.BadRequest);返回错误码
Return HttpNotFound();返回没找到
EF框架
Migration(迁移)
NuGet程序包管理器 > 程序包管理器控制台(1. Enalbe-Migrations; 2. Configuration.cs 中的AutomaticMigrationsEnabled = true; 3. 执行Update-Database;)
.edmx
导航属性
查询语法
////查询语法
//var list = from c in db.T_Class select c;
////多条件
var list = from c in db.T_Class where c.ClassName.Contains("w") && c.ClassId.Trim().Length > 2 select c;
////方法语法
//var list = db.T_Class.Select(c => c);
return View(list);
DbContext db = new StuDBEntities();//使用了多态
分页 list.OrderbyDescending(b => b.id).Skip(跳过)(3).Take(3);
Dynamic(此类型的对象跳过静态类型检查)本质上是静态类型,叫动态类型(可用于类型的字段,方法参数,方法返回值,可用于泛型的类型参数)(能够赋值给或赋值任何类型而且不需电焊工的强制类型转换,由于这些是运行时执行的)(特色:运行时尝试调用)
匿名类
可空类型 值类型的局部变量(int? S = null;)
??用在可空类型上(后面为默认值)(运算符定义在将能够为null的类型分配给非能够null的类型时返回的默认值)
留言板 .net就业需求
Validation 验证
表单提交用name属性
在重定向中只能使用TempData传递数据,没法使用ViewData和ViewBag进行重定向数据的传递
Web下的启用编辑并继续
Axure RP原型设计软件
需求列表
扩展方法:要定义在静态类内 尽可能与被扩展的类放在同一命名空间下 第一个参数是被扩展的类型(不算参数) 扩展类型前要加this关键字
db.Entry()
Sql Server Profiler 跟踪
返回值类型是Iqueryable类型的都会延迟加载Ienumerable不会延迟加载
ToList()能够禁用延迟加载
Include()能够禁用导航属性的延迟加载
<input type=”radio” />同(name)为一组
@using(Html.BeginForm())
@using(Html.BeginForm(“action”, “controller”))
@using(Html.BeginForm(“action”, “controller”, FormMethod.Get))
@using(Html.BeginForm(“create”, “test”, FormMethod.Get, new{ target = “_blank” }))
@{ Html.BeginForm(); }
@{ Html.EndForm(); }
Html.AntiForgeryToken()生成隐藏的验证字段
SelectListItem 下拉列表的数据类型
@Html.TextBoxFor(u => u.Name) 用强类型传值 能够直接绑定数据(不包含密码框中的内容-)
@using(Html.BeginForm()){ }
数据绑定优先级:最高(@Html.TextBox(“Name”, “李四”)); 第二(ViewBag中找Name);第三(ViewData.Model是查找Name)
@Html.TextBox(“SName”)没法使用Model的强类型
找到。。。在。。。时候作。。。
jquery.unobtrusive-ajax
new AjaxOptions{ UpdataTargetId = “id”, insertionMode = insertionMode.(InsertAfter,InsertBefore,Replace,ReplaceWith) }
LoadingElementId = “Id”, LoadingElementDuration = 2000, OnBegin = “begin();”, Confirm = “确认?”
MVC的验证:
浏览器端验证:增长客户体验
服务器端难:保证数据安全
System.ComponentModel.DataAnnotations;
System.Web.Mvc;
StringLength设置输入字符串容许的最大长度(也能够是区间)
RegularExpression正则
Range (int double) 的范围
Compare 比较
Remote设置服务器端远程数据验证
ErrorMessage = “”自定义错误提示消息
Display Name显示名称 Order排序
ScaffoldColumn设置模型属性是否使用基架模板(ScaffoldColumn(false)不想输出)
HiddenInput设置隐藏元素[HiddenInput(DisplayValue = false)]
DataType指定模型属性的关联类型
System.Text.RegularExpressions
空的双引号的表示模型级错误
[ValidateAntiforgeryToken
[StringLength(20, ErrorMessage = “{0}不能少于{2},不能多于{1}”)]第一个点位符取的是属性名称,{1}是最大值,{2}是最小值
[MetatataType(typeof(MessageValidatorInfo)(指定要与数据模型关联的元数据类))](伙伴类:共享元数据信息)
AOP(Aspect-Oriented Programming)面向切面编程
Filter过滤器
将那些与业务核心不大相关的杂七杂八的东西独立开,每次实现了业务核心以前或以后,调用一下对应的方法(验证登录、权限、性能检测、错误信息记录等)
新建Filters文件夹,添加类AuthorizationAttribute,引入System.Web.Mvc,继承AuthorizeAttribute
FilterAttribute(全部筛选器特性的基类)IauthorizationFilter(OnAuthorization(方法名))
请求信息封装在filterContext中(filterContext.HttpContext.Session[“”])
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { })
[MyAuthorization(自定义的过滤器)]
继承自HandlerErrorAttribute(生成的代码不能删 不然不能捕获异常)
filterContext.Result = new RedirectResult(“/Error/error.html”)
<system.web>
<customErrors mode=”On”></customErrors>
</system.web>
ActionFilterAttribute(OnActionExecuting()方法)
RouteTable(存储路由信息(存储静态信息))
RouteCollection(路由集合)(为ASP.NET路由操做提供路由的集合)
自定义路由要放在默认路由以前,后面不会再
项目 添加 区域
[MetadataType(typeof(Student))]
public partial class Student { }
[ScaffoldColumn(false)](隐藏字段,不显示)
ViewBag.ClassId = new SelectList(db.Class, “ClassId”, “Name”);
[Required(不为空验证)]
[DisplayFormat(ApplyFormatInEditMode = true, DataForatString = “{0:yyyy-MM-dd}”)]
Student student = db.Student.Find(id);//经过id去找对象
OCP原则(开闭原则):在设计一个软件系统模块(类、方法)的时候,应该能够在不修改原有的模块(修改 关闭)的基础上,能扩展其功能(扩展开放(接口))
稳定性:
扩展性:
using Microsoft.Practices.Unity;
Int64
接口设计的要尽量的小
能为应用程序的属性、类、方法等 (元数据) 打上特定的标签
特性就是一段自描述的信息 能够为类等打上一个特性
AuthorizeAttribute(验证是否受权)
ActionFilterAttribute(视图和Action的过滤)
Attribute.GetGustomAttribute()(获取指定特性)
Attribute.GetGustomAttributes(获取全部特性(是一个数组))
区域名称
HttpContext.Current.Session[“”](session)
System_Grid
System_Module
System_Action功能菜单
pagination 是否显示分页
rownumber行数
版权声明:本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。
做者:黯淡の青春 博客地址:http://www.cnblogs.com/wuwangqianxun/