溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何理解ASP.NET MVC

發(fā)布時(shí)間:2021-09-29 10:46:40 來源:億速云 閱讀:147 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“如何理解ASP.NET MVC”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何理解ASP.NET MVC”吧!

1.ASP.NET MVC請(qǐng)求過程

  1如何理解ASP.NET MVC

2.Controller

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

  1)必須實(shí)現(xiàn)System.Web.Mvc.IController接口

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

  2)必須要以Controller結(jié)尾

  3)通過不同的Action來處理具體的客戶端請(qǐng)求

3.Action

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

  (2)ActionResult方法

復(fù)制代碼 代碼如下:


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

  (3)ASP.NET MVC3的ActionResult

    如何理解ASP.NET MVC

  (4)注意事項(xiàng)

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

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

  3)默認(rèn),Action得方法名就是Action名(通過URL訪問的名稱),如有特殊需求也可通過[ActionName("OtherActionName")]標(biāo)記出特定的Action名

  4)我們可以通過[HttpPost][HttpGet]等來區(qū)分處理不同的請(qǐng)求動(dòng)作的同名Action

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

  (1) ASP.NET Routing模塊(Module)的責(zé)任是將傳入的客戶端(瀏覽器)請(qǐng)求映射為特定的MVC Controller Actions

  (2)路由機(jī)制

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

復(fù)制代碼 代碼如下:


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

  2)/Products/Detail/8

復(fù)制代碼 代碼如下:


routes.MapRoute(
"Default", // 路由名稱
"{controller}/{action}/{id}", // 帶有參數(shù)的 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程序集中轉(zhuǎn)移到了System.Web 4程序集中,成為了基礎(chǔ)服務(wù)的一部分。

  (2)在ASP.NET 4中Routing的Module被注冊(cè)在根Web.Config中,不需要你在自己的應(yīng)用程序中的Web.Config中另行注冊(cè)了

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

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

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

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

6. Routing好處

  (1) 可以方便的實(shí)現(xiàn)REST服務(wù)

  (2)Url友好化,利于SEO和增強(qiáng)用戶體驗(yàn)

  (3)Controller和Action的調(diào)用規(guī)則可定制化,降低耦合,提高靈活性

7. 過濾器

  (1) Filter是一種AOP模式,能夠?qū)σ幌盗胁僮鬟M(jìn)行橫切干擾的手段,它很大程度解耦了依賴關(guān)系,讓我們的代碼更加簡練,功能更加豐富

  (2)ASP.NET MVC中提供了4類Filter接口

   1)IActionFilter

  2)IAuthorizationFilter

  3)IExceptionFilter

  4)IResultFilter

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

  (4)Filter的切入過程

  1)以ActionFilter為例

      如何理解ASP.NET MVC

8. SP.NET MVC3中的Filter

  (1) 提供了全局注冊(cè)Filter功能

  (2)提供了對(duì)ChildAction的OutputCache支持

  1)結(jié)合[ChildActionOnly]使用

9. Model

  (1) MVC中Model主要負(fù)責(zé)維持?jǐn)?shù)據(jù)狀態(tài),將數(shù)據(jù)從數(shù)據(jù)存儲(chǔ)器中檢索并傳遞給控制器,客戶端傳送過來的數(shù)據(jù)經(jīng)過處理后再傳回?cái)?shù)據(jù)存儲(chǔ)系統(tǒng)中,是MVC中較重的一層

  (2)ASP.NET MVC框架本身并不關(guān)心數(shù)據(jù)的存儲(chǔ)系統(tǒng),并通過一些額外的幫助類和Model綁定機(jī)制簡化了Model的使用

  1)具備自綁定機(jī)制

   2)具備自驗(yàn)證機(jī)制

  (3)ASP.NET MVC3 Model的改進(jìn)

  1)ASP.NET MVC3 Model主要改進(jìn)了驗(yàn)證機(jī)制

   ->數(shù)據(jù)驗(yàn)證(Data Annotations)

   ->客戶端驗(yàn)證(Client Validation)

   ->遠(yuǎn)程驗(yàn)證(Remote Validation)

  ->自驗(yàn)證(Self Validation)

  (4)數(shù)據(jù)驗(yàn)證

  1)通過System.ComponentModel.DataAnnotations的方法集合進(jìn)行驗(yàn)證,并對(duì)客戶端驗(yàn)證產(chǎn)生一些便利影響

   2)可以通過繼承ValidationAttribute實(shí)現(xiàn)自定義驗(yàn)證的Attribute

  (5)客戶端驗(yàn)證

  1)使用Jquery的驗(yàn)證插件

  2)jquery.validate.unobtrusive.mis.js實(shí)現(xiàn)客戶端驗(yàn)證

   ->啟用客戶端驗(yàn)證

   <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>

   ->特殊的驗(yàn)證

@{

Html.EnableClientValidation();

}

  (6)遠(yuǎn)程驗(yàn)證

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

   1)[Remote("驗(yàn)證的Action名","控制器名",ErrorMessage="遠(yuǎn)程驗(yàn)證為未通過的錯(cuò)誤消息")]

   2)注意

   1)用于遠(yuǎn)程驗(yàn)證的Action必須是HttpGet的,Post提交無效

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

  (7)自驗(yàn)證

  1)在Model中結(jié)合ValidationContext和ValidationResult來提供驗(yàn)證

復(fù)制代碼 代碼如下:


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

10. 最佳實(shí)踐

  (1) 分層設(shè)計(jì)

   1)多個(gè)項(xiàng)目

  2)分離關(guān)注點(diǎn)

  3)可替換的數(shù)據(jù)訪問層

  (2)Repository模式(業(yè)務(wù)層)

   1)將數(shù)據(jù)的增刪改查(CRUD)操作封裝到Repository中

  2)業(yè)務(wù)邏輯/數(shù)據(jù)驗(yàn)證封裝到Service中

   3)Controller調(diào)用Respository和Service

  (3)PRG模式(方法)

   1)POST

   2)Redirect

   3)GET

   4)PRG模式是用來確保修改數(shù)據(jù)只發(fā)生一次

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

   1)視圖中不要含有數(shù)據(jù)處理的邏輯代碼

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

   3)構(gòu)建多個(gè)試圖/局部視圖

   4)使用適當(dāng)?shù)腀Helper和@Function語法

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

   1)ASPX模式

  @ViewData["Message"]

  @ViewData["TotalCount"]

   2)Razor模式

  @Model.Message

   @Model.TotalCount

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

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

   1)符合需求的最小化ViewModel

  1)有效驗(yàn)證

   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)視圖中調(diào)用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服務(wù)器功能

   1)SSL

   2)網(wǎng)址重寫

   3)可對(duì)<System.webServer>的配置進(jìn)行本地測(cè)試

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

   2)輕量級(jí)

   1)<5M

   2)不需要管理員賬戶

  3)高性能

11. 關(guān)于性能優(yōu)化的軟實(shí)力

  (1) 了解HTTP,Cache,Ajax各種基礎(chǔ)知識(shí)

  (2)能夠針對(duì)整體Web執(zhí)行環(huán)境進(jìn)行分析與架構(gòu)規(guī)劃

  (3)能夠設(shè)計(jì)出妥當(dāng)?shù)木彺娌呗?/p>

  (4)能夠進(jìn)一步針對(duì)網(wǎng)站性能進(jìn)行數(shù)據(jù)話分析

12. 關(guān)于性能優(yōu)化的硬功夫

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

  (2)能夠進(jìn)一步針對(duì)項(xiàng)目進(jìn)行妥善規(guī)劃,做好關(guān)注點(diǎn)分離設(shè)計(jì)

  (3)熟悉Profiling技術(shù),能夠分析出個(gè)環(huán)節(jié)的性能瓶頸

  (4)能夠針對(duì)各種環(huán)境進(jìn)行代碼優(yōu)化,提升程序的執(zhí)行性能

13. 決定WEB性能的關(guān)鍵要素

  (1) Web性能優(yōu)化基礎(chǔ)-HTTP

1)http是無狀態(tài)的

2)一個(gè)網(wǎng)頁包含了N次HTTP請(qǐng)求

(2)分析網(wǎng)頁打開時(shí)的Http狀態(tài)

1)Fiddler

2)IE10 Developer Tools

(3)客戶端優(yōu)化

1)HTTP請(qǐng)求次數(shù)減少

2)下載所使用的帶寬

3)DNS查詢的時(shí)間長短

4)CSS顯示的速度

5)JavaScript調(diào)用的速度

(4)服務(wù)端優(yōu)化

1)IIS

->控制客戶端

HTTP Cache Control

->控制服務(wù)器端

將數(shù)出緩存(Output Caching)

提升數(shù)據(jù)庫查詢速度

2)ASP.NET MVC

->調(diào)用性能改善

->適當(dāng)?shù)木彺娌呗?/p>

(5)[SeesionState]

1)使用SessionState屬性

控制Controller訪問階段狀態(tài)數(shù)據(jù)(Session)的方式

2)注意:關(guān)閉Session后不能在使用TempData傳遞信息

(6)[OutputCache]

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

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

->@Html.Action("ActionName")

2)ChildAction終于支持OutputCache屬性

->[ChildActionOnly]

->僅支持Duration,VaryByCustom與VaryByParam參數(shù)

->不能使用CacheProfile參數(shù)

(7)改變ViewEngine的默認(rèn)設(shè)置

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

->ViewEngines.Engines.Clear();

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

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

->默認(rèn)是WebFormViewEngine優(yōu)先處理

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

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

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

->當(dāng)傳入null時(shí)會(huì)引發(fā)Exception,但會(huì)被try/catch掉

->public ActionResultInsert(){

return View(new Products());

}

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

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

到此,相信大家對(duì)“如何理解ASP.NET MVC”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI