MVC系列隨筆四

來源:互聯網
上載者:User

標籤:

-》MVC→請求 處理 相應
原理:用戶端請求url→Controller→Model→Data Provider(sql server)
             →View(將資料返回給視圖)
1.一種編程模式,分為3部分:模型、視圖和控制器
 ->模型:表示程式的資料和狀態的代碼。包括商務邏輯、資料庫和底層之間的相互操作和驗證規則
 ->視圖:使用者介面,模型和視圖是一對一或者一對多,模型的操作都應該是通過所關聯的視圖的變化反映出了的
 ->控制器:模型和視圖之間的調節周旋,使用者對視圖的操作用過控制器響應給模型
2.優點:清晰的區分每個單元,適合許多開發人員開發一個項目
    單元測試變的簡單
 缺點:複雜性大,開發效率低,不適合小型、開發週期緊急的應用程式
3.Razor視圖引擎?NuGet包管理系統?
4.MVC支援在應用程式中的組件之間實現"更清晰的關注點分離"(這是需要特別小心的)?
5.控制器的定義:MVC中的控制器,主要負責相應使用者的輸入,通常情況隨著輸入會修改模型。
       控制器主要關注的是應用程式流程,和輸入資料的處理,和相關視圖輸出資料的提供。
6.MVC在web環境中工作的原理:MVC提供的是方法調用的結果,而不是動態產生的頁面
7.MVC控制器中的index()方法負責決定當瀏覽網站首頁時觸發的事件
 
  ------------------約定---------------------
  Controller放在controllers檔案夾中,並且命名方式以XxController名字結尾
  每個Controller都對應View中的一個檔案夾,並且跟Controller名相同
  Controller中的方法名都對應一個View(非必須,但建議這麼做),而且View的名字和Action的名字相同
 
   -------------------------開發流程-------------------------
   建立Controller
   建立Action
   根據Action建立View
   在Action擷取資料並生產ActionResult傳遞給View
   View是顯示資料的模板
   url請求→Controller.Action處理→View響應
  
   --------------------------MVC優點---------------------
   1.很容易將複雜的應用分成M、V、C模型  有效簡化了複雜的結構,體現了很好的分離原則
   2.因為沒有使用server-based forms。控制起來更加靈活,頁面更加乾淨
   3.可以控制產生自訂的url。seo友好的url
   4.強型別View實現,更安全、更可靠、更高效
   5.讓web開發可以專註於某一層。更利於分工配合適合用於大型構架開發
   6.很多企業已經開始使用MVC作為開發架構  MVC+EF+WCF
  
   ------------Global-------------------
   路由集合中已經存在名為“Default”的路由。路由名必須是唯一的。
  
   MapRoute
   對於一個網站,為了SEO友好,一個網址的URL層次不要超過三層
   網域名稱第一層,頻道第二層,網頁最後一層   使用預設執行個體中的"{controller}/{action}/{其他參數}"會影響網站的SEO
  
  
   (1)Routing 規則有順序(按照的是添加的順序),如果一個url匹配了多個Routing規則,則按照第一個匹配的Routing規則執行
   (2)由於上面的規則,要將具體頻道的具體頁面放在最上方,將頻道首頁和網站首頁放在最下方
   (3){*values}表示後面可以使任意的格式
  
   測試Routing
   用於測試url寫錯或順序不對問題,藉助於RouteDebug輔助類(外掛程式dll)
    添加這個RouteDebug.dll到項目中,並且添加引用
 在Application_Start方法中添加一句話:
 RouteDebug.Routebugger.RewritesForTesting(RouteTable.Routes);
 -----------------------Controller/Action--------------------
 1.Controller負責擷取Model並將Model資料傳遞給View對象,通知View對象顯示
 2.在ASP.NET MVC中,一個Controller可以包含多個Action,每一個Action都是一個方法,返回一個ActionResult執行個體
     ActionResult類包括ExecuteResult方法,當ActionResult對象返回後會執行此方法
 ->頁面處理流程
 發送請求→UrlRoutingModule捕獲請求→MVCRoutingHandler.GetHttpHandler()→MVCHandler.ProcessRequest()
 ->MVCHandler.Processrequest()處理流程
 使用Factory 方法擷取具體的Controller→Controller.Execute()→釋放Controller對象
 ->Controller.Execute()處理流程
 擷取Action→調用Action方法擷取返回的ActionResult→調用ActionResult.ExecuteResult()方法
 ->ActionResult.ExecuteResult()處理流程
 擷取IView對象→根據IView對象中的頁面路徑擷取Page類→調用IView.RenderView()方法(內部調用Page.RenderView方法)
 -----------------------------------View/Model-------------------------------------:
 在MVC中,Model對象是指包含了資料的模型
     Controller將Model傳遞給View以後,View對象中不應該做任何的商務邏輯處理,僅僅根據Model對象做一些顯示邏輯的處理
 傳遞Model對象時,有兩種選擇:
 1.傳遞一個弱類型的集合,即成員為Object類型的集合,在View中需要將每個成員轉換為我們需要的類型,比如in,string,自訂類型等等
 2.傳遞強型別對象,這些類型是我們自訂的。在View中直接使用我們傳遞的強型別對象,不需要再轉換類型
 ->如何傳遞
  ASP.NET MVC 架構定義了ViewContext類,直譯後是"View上下文",其中儲存和View有關的所有資料,其中Model對象也封裝在了此類型中
  ViewContext對象包含三個屬性:
  ·IView View
  ·ViewDataDictionary ViewData
  ·TempDataDictionary TempData
 
  ViewData和TempData是用來儲存Model對象的。
  Controller的View方法會將Controller類的ViewData和TempData屬性值傳遞給ViewResult
  ViewData和TempData的區別(都可以傳遞弱類型資料)
  ·ViewData的生命週期和View相同,只對當前View有效
  ·TempData儲存在Session中,Controller每次執行請求的時候會從Session中擷取TempData並刪除Session,擷取完TempData資料後雖然儲存在內部的字典對象中,但是TempData集合的每個條目訪問一次後就從字典表中刪除。也就是說TempData的資料至多隻能經過一次Controller傳遞
 
  3.HtmlHelper(內部定義了各種擴充方法)--System.Web.Mvc.Html
  有七個靜態類組成:FormExtensions   InputExtensions   LinkExtensions   SelectExtensions   TextAreaExtensions   ValidationExtensions   RenderPartialExtensions
 
  1>FormExtensions
 BeginForm 主要實現表單定義的開始部分
 BeginRouteForm 主要實現表單定義的開始部分,其中以路由的方式設定Action的值
 EndForm  主要實現表單定義的結束部分  Html.EndForm()=</form>  也可以用using語句,替代Html.EndForm()
 2>InputExtensions
 CheckBox主要實現複選框控制項
 Hidden 定義表單中有關變數的隱藏數值
 Password主要實現輸入密碼的文字框
 RadioButton主要實現選項按鈕控制項
 TextBox主要實現輸入的單行文字框
 3>LinkExtensions
 ActionLink主要實現一個串連
 RouteLink主要實現一個串連
 4>RenderPartialExtensions
 RenderPartial用於顯示使用者控制項
 5>SelectExtensions
 DropDownList實現下拉式清單方塊
 ListBox實現一個列表框
 6>TextAreaExtensions
 TextArea實現多行文字框
 7>ValidationExtensions
 ValidationMessage設定驗證框,不正確會變成紅色,右邊會出現一個*
 ValidationSummary顯示驗證摘要
--------------------------------------------------------------------ViewEngine解析------------------------------------------------------------------
  為什麼使用ViewEngine,ViewEngine的作用?
  答:asp.net webform頁面內建文法和功能,編譯頁面,輸入HTML,為了繼續使用ASP.NET WebForm的頁面引擎,asp.net         mvc抽象出來了viewengine
  作用就是為了找到view對象,編譯view對象中的語言代碼實行語言邏輯,並輸入HTML
 1.IView介面
 IView介面是MVC結構中對View對象的抽象,此介面只有一個方法:
 void Render(ViewContext viewcontext,TextWriter textwriter);
 render 方法是對View對象的展示,通常是將HTML寫入到Writer中供瀏覽器展示
 
 --------------------------------------Razor文法(最新標準)--------------------------------------------
  ·輸出@符號:@@
  ·輸出Email地址:Razor模板會自動識別出Email地址,所以不需要我們進行任何的轉換。而在代碼塊中,只需要使用@:[email protected]即可。@: 表示後面的內容為文本
  ·輸出HTML代碼(包含標籤):直接輸出,string html="<font color=\"red\">文本</font>";@html
  ·輸出HTML內容(不包含標籤):
    有兩種方法,第一種:IHtmlString html=new HtmlString("<font                   color=\"red\">文本</font>");@html;第二種:string html="<font color=\"red\">文本</font>";@Html.Raw(html);

--------------------------------------------Filter (AOP-aspect oriented programming 切面編程)------------------------------
1.Filter即為過濾器
2.asp.net mvc中,有三種攔截器,Action攔截器,Result攔截器和Exception攔截器
3.攔截器要繼承FilterAttribute基類,Action攔截器還要實現IActionFilter介面,而Exception攔截器需要實現IExceptionFilter介面
Exception攔截器最後一行filterContext.ExceptionHandled=true;(很重要),告訴系統,異常已經處理,不要再次處理了
4.Filter的適用情景:
 ->判斷登入與否或使用者權限
 ->決策輸出緩衝
 ->防盜鏈
 ->防蜘蛛
 ->本地化與國際化設定
 ->實現動態Action
5.asp.net MVC提供了以下幾種預設的Filter:
    Filter Type   實現介面      執行時間              Default Implementation
 Authorization  IAuthorizationFilter  在所有Filter和Action執行之前執行     AuthorizeAttribute
 Action filter   IActionFilter     分別在Action執行之前和之後執行     ActionFilterAttribute
 Result filter   IResultFilter     分別在Action Result執行之前和之前    ResultFilterAttribute
 Exception filter IExceptionFilter   只有在filter,或者action metod,或者    HandleErrorAttribute
                 action result拋出一個異常時候執行
6.Action執行前:OnActionExecting方法先執行→Action執行→OnActionExecuted方法執行→OnResultExecuting方法執行→返回的ActionResult中的executeResult方法執行→OnResultExecuted執行
7.全域Filter
 在Global.asax中:
 public static void  RegisterGlobalFilters(GlobalFilterCollection filters)
 {
  filters.Add(new HandleErrorAttribute());
  //註冊全域過濾器
  filters.Add(new TestFilterAttribute(){Message="全域"});
 }
8.預設情況下Action上TestFilterAttribute標籤後,雖然在Controller上也打上了此標籤,單它只有Action上的標籤作用了。
 補充:如果Action沒有打上TestFilterAttribute標籤,那麼Controller上的標籤便會被執行
 要想Controller和Action上的Filter都執行,需要加上這一句話:
 [AttributeUsage(AttributeTargets.All,AllowMulitiple=true)]即可
9.AcceptVerbs規定頁面的訪問形式,如:
 [AcceptVerbs(HttpVerbs,Post)]
 public ActionResult Example(){
  return View();
 }
 頁面只能以Post形式訪問,即表單提交。
10.ActionName
 規定Action的名稱
 應用情境:如果不想用方法名作為Action名,或Action名為關鍵字的話,如:
 [AcitonName("class")]
 public AcitonResult Example(){
  return View();
 }
11.NonAction
 當前方法僅是普通方法不解析為Aciton
12.OutputCache
 為Action添加緩衝
  [OutputCache(Duration=60,VaryByParam="*")]
  public ActionResult Example()
  {
   return View();
  }
13.ValidateInput
 該Action可以接受Html等危險代碼(ASP.NET MVC在aspx中設定<%@Page的屬性無法完成等同任務)
 [ValidateInput(false)]
 public ActionResult Example()
 {
  return View();
 }
14.ValidateAntiForgeryTokenAttribute
  用於驗證伺服器篡改
  [ValidateAntiForgeryToken]
  public ActionResult Example()
  {
  return View();
  }
-------------------------------------------MVC+EF-----------------------------------
1.注意點:修改,以往做法是先把資料查出來,然後在修改,然後再放回資料庫
    小技巧 
    EF上下文.執行個體名.Attach(頁面傳過來的執行個體);
    EF上下文.ObjectStateManager.ChangeObjectState(執行個體,System.Data.EntityState.Modified);
    EF上下文.SaveChanges();

MVC系列隨筆四

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.