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/