日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET MVC必知必会知识点总结(二)

發布時間:2023/12/10 asp.net 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET MVC必知必会知识点总结(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、實現Controller的依賴注入:

1.自定義繼承DefaultControllerFactory 類的控制器工廠類并重寫GetControllerInstance方法;(如:InjectControllerFactory)

2.在Global.asax文件中的Application_Start方法中注冊該控制器工廠類,示例如下:

ControllerBuilder.Current.SetControllerFactory(new InjectControllerFactory());

二、在Action方法中添加ActionName特性實現為其指定別名,或者添加NonAction以表明該方法并不會被路由匹配到,可通過繼承ActionMethodSelectorAttribute抽象類并重寫IsValidForRequest方法實現類似HttpGet、HttpPost、HttpPut、HttpDelete 和 NonAction 等自定義Action方法選擇器

三、導步Controller:繼承自AsyncController抽象類,并自定義異步Action方法(異步方法有兩種:一種是XxxAsync/XxxCompleted,二種是Task返回值),具體實現詳見:ASP.NET MVC下的異步Action的定義和執行原理

四、基本過濾器如下,可以通過實現相應接口來自定義過濾器

五、在View上動態添加或處理內容

1.內聯代碼(代碼片段):如 @{ .. }或<% .. %>
2.Html helper方法:生成單個或多個HTML元素,如 Html.Label,Html.Editor等
3.Section:在指定的位置插入創建好的一部分內容(類似ASP.NET PlaceHolder),如 @section sectionName{ ...}
4.Partial view:存在于一個單獨的視圖文件中,作為子內容可在多個視圖中共享,如?Html.Partial、Html.RenderPartial
5.Child action,相當于一個包含了業務邏輯的UI組件。當使用child action時,它調用 controller 中的 action 來返回一個view,并將結果插入到輸出流中,如 Html.Action、Html.RenderAction

六、HTML Helper擴展方法:可直接生成相應的HTML元素,主要分為如下幾類

1.鏈接類:在System.Web.Mvc.Html.LinkExtensions靜態類包含生成各種鏈接的擴展方法;
2.表單類:在System.Web.Mvc.Html.FormExtensions靜態類包含生成From元素的擴展方法;
3.輸入類:在System.Web.Mvc.Html.InputExtensions靜態類包含生成各種輸入元素的擴展方法;
4.多文本輸入類:在System.Web.Mvc.Html.TextAreaExtensions靜態類包含生成TextArea元素的擴展方法;
5.選擇類:在System.Web.Mvc.Html.SelectExtensions靜態類包含生成各種選擇元素的擴展方法;
6.動態編輯器模板類:在System.Web.Mvc.Html.EditorExtensions靜態類包含依據要指定的類型來動態生成表單成員元素方法;

若要自定義HTML Helper動態編輯器模板類,可按照MVC約定,在?/Views/Shared/EditorTemplates 文件夾下創建相應的局部視圖文件,示例代碼如下:

//定義的HTML HELPER模板方法: @model MvcApplication1.Models.Role@Html.DropDownListFor(m => m, new SelectList(Enum.GetNames(Model.GetType()), Model.ToString()))//View中使用: @model MvcApplication1.Models.User@Html.EditorFor(m => m.Role)

注意:模板類文件名需與成員類型名稱相同,或在數據實體類中指定成員使用哪個類型自定義模板(如:[UIHint("Role")])

七、MVC視圖中使用AJAX:

1.使用原生的Ajax或第三方類庫(如:jQuery.ajax)

2.?使用 MVC Unobtrusive Ajax

A.在Web.config文件中配置啟動?Unobtrusive Ajax(默認為啟用)

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

B.在調用的頁面頂部引入相應的JS腳本文件,如下:

<script src="~/Scripts/jquery-1.8.2.min.js"></script><script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>

C.最后采用Ajax.BeginForm來包裹表單成員,并為Ajax.BeginForm設置相應的參數

整個示例代碼如下:

ACTION代碼:

public ActionResult Ajax(){return View();}public ActionResult GetPersons(string selectedRole){IEnumerable<Person> persons = new[]{new Person(){FirstName="z", LastName="x",Role=Role.User},new Person(){FirstName="z1", LastName="x",Role=Role.Admin},new Person(){FirstName="z2", LastName="x",Role=Role.User},new Person(){FirstName="z3", LastName="x",Role=Role.Admin},new Person(){FirstName="z4", LastName="x",Role=Role.User}};if (selectedRole != "All"){persons = persons.Where(p => Enum.GetName(typeof(Role), p.Role) == selectedRole);}return PartialView(persons);}

VIEW代碼:

//主視圖Ajax<h2>Ajax</h2><script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script><table><tbody id="result"></tbody> </table>@using (Ajax.BeginForm("GetPersons", new AjaxOptions() { UpdateTargetId = "result" })) {<div>@Html.DropDownList("selectedRole", new SelectList(new[] { "All" }.Concat(Enum.GetNames(typeof(MvcApplication1.Models.Role)))))<button type="submit">Submit</button></div> }//分部視圖:GetPersons @model IEnumerable<MvcApplication1.Models.Person>@foreach (var p in Model) {<tr><td>@p.FirstName</td><td>@p.LastName</td><td>@p.Role</td></tr> }

?

八、Model Binding(模型綁定): 是 HTTP 請求和 Action 方法之間的橋梁,它根據 Action 方法中的 Model 類型創建 .NET 對象,并將 HTTP 請求的數據經過轉換賦給該對象。

A.Model Binder(模型綁定器),顧名思義,可以形象的理解為將數據綁定到一個 Model 的工具。

MVC 框架內置默認的 Model Binder 是 DefaultModelBinder 類。當 Action Invoker 沒找到自定義的 Binder 時,則默認使用 DefaultModelBinder。默認情況下,DefaultModelBinder 從如下 4 種途徑查找要綁定到 Model 上的值:

Request.Form,HTML form 元素提供的值。
RouteData.Values,通過應用程序路由提供的值。
Request.QueryString,所請求 URL 的 query string 值。
Request.Files,客戶端上傳的文件。

B.綁定到復合類型(嵌套關聯類型、可索引的類型等)需注意視圖中表單成員的元素名稱name必需符合可關聯、可索引,示例如下:

//MODEL public class Person { public int PersonId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public Address HomeAddress { get; set; } } public class Address { public string City { get; set; } public string Country { get; set; } }//VIEW @Html.EditorFor(m=> m.HomeAddress.Country) //或<input id="HomeAddress_Country" name="HomeAddress.Country" type="text" value="" /> //可索引類型的在VIEW寫法 @Html.Editor("[" + i + "].Country") //或 @Html.EditorFor(m => m[i].Country) //或 <input name="[0].Country" type="text" value="" />

當然如果不想這么麻煩也可以自己實現ModelBinder 類,然后在ACTION方法中顯式指定ModelBinder,如下:

public ActionResult Index([ModelBinder(typeof(CustomerModelBinder))]Person p){return View();}

?九、Model驗證的幾種方法:

1.在Action方法中使用 ModelState 對Model對象的屬性值自行判斷合法性,如:

public ActionResult UpdatePerson(Person p){if (string.IsNullOrEmpty(p.FirstName)){ModelState.AddModelError("FirstName", "FirstName is not allow null!");}if (string.IsNullOrEmpty(p.LastName)){ModelState.AddModelError("LastName", "LastName is not allow null!");}if (ModelState.IsValid){ //執行更新}return View();}

2.在Model各屬性上直接定義驗證規則,然后DefaultModelBinder類會自動進行驗證,如:

public class Person{[Range(1,int.MaxValue)]public int PersonId { get; set; }[Required(ErrorMessage="請輸入姓")]public string FirstName { get; set; }[Required(ErrorMessage = "請輸入名")]public string LastName { get; set; }[Required(ErrorMessage = "請完整輸入地址")]public Address HomeAddress { get; set; }public Role Role { get; set; }}

3.通過繼承ValidationAttribute抽象類并重寫IsValid方法來自定義驗證特性類(如下示例),然后使用方法與方法2相同

public class MailAttribute:ValidationAttribute{public override bool IsValid(object value){if(value==null) return false;var regex = new System.Text.RegularExpressions.Regex(@"^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$", System.Text.RegularExpressions.RegexOptions.IgnoreCase);return regex.IsMatch(value.ToString());}}//MODEL的某個屬性設置:[Mail(ErrorMessage="不是有效的電子郵箱地址")]public string EMail { get; set; }

4.MODEL自驗證:讓MODEL類實現IValidatableObject接口,在Validate方法進行驗證判斷,然后DefaultModelBinder類會自動進行驗證,如:

public class Computer:IValidatableObject{public string CPU { get; set; }public string MB { get; set; }public string MEM { get; set; }public string HDD { get; set; }public string Power { get; set; }public IEnumerable<ValidationResult> Validate(ValidationContext validationContext){var errors=new List<ValidationResult>();if (string.IsNullOrEmpty(CPU)){errors.Add(new ValidationResult("CPU is not allow null!"));}if (string.IsNullOrEmpty(MB)){errors.Add(new ValidationResult("MB is not allow null!"));}if (string.IsNullOrEmpty(MEM)){errors.Add(new ValidationResult("MEM is not allow null!"));}if (string.IsNullOrEmpty(Power)){errors.Add(new ValidationResult("Power is not allow null!"));}return errors;}}

以上驗證默認是在提交到服務器端后再進行的驗證,也可以開啟客戶端驗證或遠程驗證(實現原理都是基于AJAX),在此不再說明。

?

轉載于:https://www.cnblogs.com/zuowj/p/4772709.html

總結

以上是生活随笔為你收集整理的ASP.NET MVC必知必会知识点总结(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。