ASP.NET MVC小結之基礎篇(二)_實用技巧

來源:互聯網
上載者:User

整理除了這個筆記,共用一下子,基本MVC的所有東西都介紹了,但是都是很基礎的東西。本來打算一篇發表完的,但是發現東西有點多,所以分成了兩篇文章,這是最後一篇了!

1.ASP.NET MVC請求過程

  1

2.Controller

  (1) 控制器在ASP.NET MVC中扮演著處理用戶端請求的角色

  1)必須實現System.Web.Mvc.IController介面

   ->通常直接繼承System.Web.MVC.Controller類

  2)必須要以Controller結尾

  3)通過不同的Action來處理具體的用戶端請求

3.Action

  (1) 是指在繼承了System.Web.Mvc.Controller類中所定義的傳回值的類型可以相容

  (2)ActionResult方法

複製代碼 代碼如下:

namespace MvcApplication.Controllers
{
public class HomeController:Controller
{
public ActionResult Index()
{
ViewBag.Message="韓迎龍";
return View();
}
}
}

  (3)ASP.NET MVC3的ActionResult

    

  (4)注意事項

  1)能夠通過URL訪問的Action必須是公有(Public)方法

  2)如果標記了[NonAction]屬性,這不能通過URL訪問該Action

  3)預設,Action得方法名就是Action名(通過URL訪問的名稱),如有特殊需求也可通過[ActionName("OtherActionName")]標記出特定的Action名

  4)我們可以通過[HttpPost][HttpGet]等來區分處理不同的請求動作的同名Action

4.ASP.NET Routing 路由,過濾器

  (1) ASP.NET Routing模組(Module)的責任是將傳入的用戶端(瀏覽器)請求映射為特定的MVC Controller Actions

  (2)路由機制

  1)路由引擎 -映射URLS到Controlller

複製代碼 代碼如下:

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // 路由名稱
"{controller}/{action}/{id}", // 帶有參數的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 參數預設值
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}

  2)/Products/Detail/8

複製代碼 代碼如下:

routes.MapRoute(
"Default", // 路由名稱
"{controller}/{action}/{id}", // 帶有參數的 URL
);
public class ProductsController:Controller
{
public ActionResult Details(int id)
{
return View();
}
public ActionResult Edit(int id)
{
return View();
}
}

5. MVC3中Routing變更

  (1) 從System.Web.Routing3.5程式集中轉移到了System.Web 4程式集中,成為了基礎服務的一部分。

  (2)在ASP.NET 4中Routing的Module被註冊在根Web.Config中,不需要你在自己的應用程式中的Web.Config中另行註冊了

  (3)UrlRoutingModule處理的事件減少了一個,僅處理PostResolveRequestCache事件

  (4)HttpRequest新增加了一個RequestContext屬性

  (5)增加了PageRouteHandler,支援WebForm路由功能

  (6)RouteCollection中增加了4個MapPageRoute的重載方法,添加路由規則更方便了

6. Routing好處

  (1) 可以方便的實現REST服務

  (2)Url友好化,利於SEO和增強使用者體驗

  (3)Controller和Action的調用規則可定製化,降低耦合,提高靈活性

7. 過濾器

  (1) Filter是一種AOP模式,能夠對一系列操作進行橫切幹擾的手段,它很大程度解耦了依賴關係,讓我們的代碼更加簡練,功能更加豐富

  (2)ASP.NET MVC中提供了4類Filter介面

   1)IActionFilter

  2)IAuthorizationFilter

  3)IExceptionFilter

  4)IResultFilter

  (3)ASP.NET MVC中提供了OutputCacheAttribute,HandlErrorAttribute,AuthorizeAttribute等常用Filter實現

  (4)Filter的切入過程

  1)以ActionFilter為例

      

8. SP.NET MVC3中的Filter

  (1) 提供了全域註冊Filter功能

  (2)提供了對ChildAction的OutputCache支援

  1)結合[ChildActionOnly]使用

9. Model

  (1) MVC中Model主要負責鑑效組資料狀態,將資料從資料存放區器中檢索並傳遞給控制器,用戶端傳送過來的資料經過處理後再傳回資料存放區系統中,是MVC中較重的一層

  (2)ASP.NET MVC架構本身並不關心資料的儲存系統,並通過一些額外的協助類和Model綁定機制簡化了Model的使用

  1)具備自綁定機制

   2)具備自驗證機制

  (3)ASP.NET MVC3 Model的改進

  1)ASP.NET MVC3 Model主要改進了驗證機制

   ->資料驗證(Data Annotations)

   ->用戶端驗證(Client Validation)

   ->遠程驗證(Remote Validation)

  ->自驗證(Self Validation)

  (4)資料驗證

  1)通過System.ComponentModel.DataAnnotations的方法集合進行驗證,並對用戶端驗證產生一些便利影響

   2)可以通過繼承ValidationAttribute實現自訂驗證的Attribute

  (5)用戶端驗證

  1)使用Jquery的驗證外掛程式

  2)jquery.validate.unobtrusive.mis.js實現用戶端驗證

   ->啟用用戶端驗證

   <appSettings>

   <add key="ClientValidationEnabled" value="true" />

   <add key="UnobtrusiveJavaScriptEnabled" value="true" />

  </appSettings>

  ->引用JQuery

   <script src="http://www.cnblogs.com/Scripts/jquery.validate.min.js" type="text/javascript"></script>

    <script src="http://www.cnblogs.com/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>

   ->特殊的驗證

@{

Html.EnableClientValidation();

}

  (6)遠程驗證

   1)在Model的中使用跟RequiredAttribute相似

   1)[Remote("驗證的Action名","控制器名",ErrorMessage="遠程驗證為未通過的錯誤訊息")]

   2)注意

   1)用於遠程驗證的Action必須是HttpGet的,Post提交無效

   2)Action返回的結果是JsonResult,不是直接返回布爾值

  (7)自驗證

  1)在Model中結合ValidationContext和ValidationResult來提供驗證

複製代碼 代碼如下:

 public IEnumerable<ValidationResult> Validate(ValidationContext validationResult)
   {
   if(EndDate<=StartDate)
  {
   yield return new ValidationResult("結束時間必須大於開始時間");
   }
   }

10. 最佳實務

  (1) 分層設計

   1)多重專案

  2)分離關注點

  3)可替換的資料訪問層

  (2)Repository模式(業務層)

   1)將資料的增刪改查(CRUD)操作封裝到Repository中

  2)商務邏輯/資料驗證封裝到Service中

   3)Controller調用Respository和Service

  (3)PRG模式(方法)

   1)POST

   2)Redirect

   3)GET

   4)PRG模式是用來確保修改資料只發生一次

  (4)保持視圖中代碼量最小化

   1)視圖中不要含有資料處理的邏輯代碼

   2)視圖中要避免包含大的代碼塊

   3)構建多個試圖/局部視圖

   4)使用適當的@Helper和@Function文法

  (5)跟神奇的字串說"拜拜了"

   1)ASPX模式

  @ViewData["Message"]

  @ViewData["TotalCount"]

   2)Razor模式

  @Model.Message

   @Model.TotalCount

   3)盡量使用特定的Model,而避免使用ViewData/ViewBag

  (6)DomainModel(領域模型)!=ViewModel(視圖模型)

   1)符合需求的最小化ViewModel

  1)有效驗證

   2)高安全性

  3)高效能

  2)使用一些Mapping工具,做雙向映射填充

   1)AutoMapper,EmitMapper,ValueInjecter

   2)自訂的ORM-GenerPoint.ORM

   3)使用專門的ViewModel填充邏輯,輕鬆解決國際化/本地化

  (7)使用新的AJAX Helper

  1)Web.Config中德appSettings

   <add key="UnobtrusiveJavaScriptEnabled" value="true">

   2)視圖中引用jquery.unobtrusive-ajax.js

   3)視圖中調用AJAX Helpers

   1)@Ajax.ActionLink("Home","Index",new AjaxOptions{UpdateTargetId="main"})

   2)<a data-ajax="true" data-ajax-mode="replace" data-ajax-update="#content" href="/">Home</a>

  (8)視圖中儘可能的寫HTML代碼

  1)儘可能寫純HTML代碼

  2)不要為了隱藏HTMl,而故意自訂Html.Submit之類的Helper

  3)儘可能不使用WebForm控制項做視圖代碼渲染

  (9)IIS Express 7.5

  1)具有完整的Web伺服器功能

   1)SSL

   2)網址重寫

   3)可對<System.webServer>的配置進行本地測試

   4)IIS7.X其他的模版集合

   2)輕量級

   1)<5M

   2)不需要管理員賬戶

  3)高效能

11. 關於效能最佳化的軟實力

  (1) 瞭解HTTP,Cache,Ajax各種基礎知識

  (2)能夠針對整體Web執行環境進行分析與架構規劃

  (3)能夠設計出妥當的緩衝策略

  (4)能夠進一步針對網站效能進行資料話分析

12. 關於效能最佳化的硬功夫

  (1) 熟悉.net/C#/ASP.NET MVC架構與核心原理

  (2)能夠進一步針對項目進行妥善規劃,做好關注點分離設計

  (3)熟悉Profiling技術,能夠分析出個環節的效能瓶頸

  (4)能夠針對各種環境進行代碼最佳化,提升程式的執行效能

13. 決定WEB效能的關鍵要素

  (1) Web效能最佳化基礎-HTTP

1)http是無狀態的

2)一個網頁包含了N次HTTP請求

(2)分析網頁開啟時的Http狀態

1)Fiddler

2)IE10 Developer Tools

(3)用戶端最佳化

1)HTTP請求次數減少

2)下載所使用的頻寬

3)DNS查詢的時間長短

4)CSS顯示的速度

5)JavaScript調用的速度

(4)服務端最佳化

1)IIS

->控制用戶端

HTTP Cache Control

->控制伺服器端

將數出緩衝(Output Caching)

提升資料庫查詢速度

2)ASP.NET MVC

->調用效能改善

->適當的緩衝策略

(5)[SeesionState]

1)使用SessionState屬性

控制Controller訪問階段狀態資料(Session)的方式

2)注意:關閉Session後不能在使用TempData傳遞資訊

(6)[OutputCache]

1)Html.Action與Html.RenderAction支援Output Caching

->@{Html.RenderAction("ActionName")}

->@Html.Action("ActionName")

2)ChildAction終於支援OutputCache屬性

->[ChildActionOnly]

->僅支援Duration,VaryByCustom與VaryByParam參數

->不能使用CacheProfile參數

(7)改變ViewEngine的預設設定

1)移除多餘的ViewEngine以提升解析View的速度

->ViewEngines.Engines.Clear();

->ViewEngines.Engines.Add(new RazorViewEngine());

2)也可以通過這種方式變更載入View的順序

->預設是WebFormViewEngine優先處理

->ViewEngines.Engines.Add(new WebFormViewEngine());

(8)避免闖入為null給視圖(View)

1)Html.TextBoxFor(m=>m.Name)

->當傳入null時會引發Exception,但會被try/catch掉

->public ActionResultInsert(){

return View(new Products());

}

(9)關閉Web.Config的debug模式

1)<compilation debug="False" targetFramework="4.0" />

基礎篇就到這裡了,下面的文章我們來些深入點的知識,大家期待下吧

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.