Asp.Net mvc基礎
Asp.Net mvc
(一)MVC模式簡介
(1)模型(models):描述資料,修改,操作資料的業務
(2)檢視(View):應用程式使用者介面的顯示
(3)控制器(Controller):處理整個應用程式的邏輯通訊
(4)mvc是,models,view,controller的簡寫與簡稱
(5)Asp.Net mvc是一種wep應用程式的框架,mvc模式應用於Asp.Net框架
(二)ASP.NET Wep API
(1)路由:將URL對映到控制器中,就而達到了HTTP的上下文服務,優點是:程式碼更加的簡單,易懂
(2)模型繫結與驗證:MVC的簡化輸入表單域,cookies,URL等等的引數
(3)過濾器:通過特性向操作新增一些行為
(4)基架:可以使用和新增mvc控制器,來新增新的wep api控制器。
(5)Http程式設計模型:處理HTTP請求和響應,是Wep API開發體驗得到一定的優化。
(三)顯示模式
(1)顯示模式是根據瀏覽器發出的請求,基於約定的方法來選擇不同的檢視。
(四)捆綁和微小型框架
(1)作用:ASP.NET MVC4以後支援的捆綁和微小型框架,框架通過合併指令碼引用來把若干個請求合併為一個請求,這樣就大大的減少了站點的請求數量了。
ASP.NET MVC控制器
(1)控制器的作用:控制器主要負責接收和解釋輸入,並更新任何資料類,然後通過通知使用者進行更改和應用程式的更新。
ASP.NET MVC檢視
表單提交:1、檢視上需要有form2、檢視上需要有submit
1、控制器需要新增兩個同名Action2、通過特性修飾區分兩個Action[HttpGet]public ViewResult xxx(){}
[HttpPost]public ViewResult xxx(){}
檢視提交:1、弱型別檢視:集合(FormCollection)[HttpPost]public ViewResult xxx(FormCollection form){ form["key"]}
2、強型別檢視:物件(類 物件)[HttpPost]public ViewResult Insert(Models.User user){ }
在檢視中建立超連結的方式:1、@Html.ActionLink(連結文字,action名稱)跳轉到當前控制器下的action名稱上2、@Html.ActionLink(連結文字,action名稱,控制器名稱)跳轉到指定的控制器下的action名稱上3、@Html.ActionLink(連結文字,action名稱,路由引數物件)路由引數物件:A、是一個object物件,建立時需要new{}生產一個匿名物件B、該匿名物件至少需要包含一個id=值的屬性,例如:new {id=1243}C、該匿名物件如果要包含多個路由設定,格式為new{controller=控制器名稱,action=方法名稱,id=引數值}
@Html.RouteLink(連結文字, 路由物件)路由物件:A、是一個object物件,建立時需要new{}生產一個匿名物件B、格式可以是以下任意一種new {controller=控制器名稱,action=方法名稱,id=引數值}new {action=方法名稱,id=引數值}new {controller=控制器名稱,id=引數值}new {id=引數值}
(1)Razor
(1)檢視動態新增內容,可以分為四個類方法:內聯程式碼、html輔助器方法、分部檢視、子動作。
一、使用內聯程式碼
內聯程式碼就是以@符號開頭的一條或多條C#語句。這是Razor檢視引擎的核心,也是生成動態內容最簡單而容易的方法。
1、將名稱空間引入檢視
2、Razor的html字串編碼
例如:在新建的專案中新增MyUtility.cs
namespace DynamicData.Infrastructure
{
public class MyUtility
{
public static string GetUsefulData()
{
return "<form>Enter your password:<input type=text>"
+ "<input type=submit value=\"Log In\"/></form>";
}
}
}
(2)view使用片段
(1)佈局頁呢?是把所有的那些控制元件全部寫完了,而自己要做的則是新增自己想要的內容而已。
(2)Razor引擎支援分頁的概念,能夠在一個佈局裡面提供內容局域,Razor分頁的功能能更好的控制檢視部分插入佈局以及它放在的位置,例如:
@{
ViewBag.Title = "Home Page";
}
@section Header{
<h4>這個是站點的頂部</h4>
}
@section Body{
<h4>這是內容部分</h4>
}
@section Footer{
<h4>這是站點的底部</h4>
}
(3)MVC內建的檢視引擎
(1)Razor檢視引擎是一個乾淨的、輕量級的、簡單的檢視引擎,最大限度的減少了語法和額外的字元。
(2)使用指定的編輯器物件來呈現指定的檢視上下午。
(3)引擎的順序是以自定義的引擎優先,如果自我定義的檢視引擎處理不了,後到系統的引擎。
(五)模型繫結
(一)理解模型繫結
模型繫結是HTTP請求與C#方法之間的一個橋樑,它根據 Action 方法中的 Model 型別建立 .NET 物件,並將 HTTP 請求資料經過轉換賦給該物件。當我們啟動專案,並導航到/Home/Index/1,我們會看見圖下:
當我們請求 /Home/Index/1 URL 時,路由系統便將最後一個片段值 1 賦給了 id 變數。action invoker 通過路由資訊知道當前的請求需要 Index action 方法來處理,但它呼叫 Index action 方法之前必須先拿到該方法引數的值。 預設的動作呼叫器ControllerActionInvoker,要依靠模型繫結器來生成呼叫動作所需要的的資料物件,模型繫結器由IModelBinder介面所定義。在本例中,動作呼叫器會檢查Index方法,並發現它具有一個int型引數,於是會查詢負責int值繫結的繫結器,並呼叫它的BindModel方法。
(2)預設的模型繫結器
應用程式有多個繫結器,大多數的都是依賴與內建繫結器類---DefaultModelBinder,一般情況下,模型繫結器搜尋4個路徑,如下所示。
源 | 描述 |
---|---|
Request.Form | HTML表單提供的值 |
RouteDate.Values | 使用應用程式路由獲取的值 |
Request.QueryString | 包含在URL的請求字串裡面的資料 |
Request.Files | 作為請求部分被上傳的檔案 |
基本的程式碼案例
1.首先在Models下面建立Person類
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MVCModels.Models
{
public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
public Address HomeAddress { get; set; }
public Role Role { get; set; }
}
public enum Role
{
Admin,
User,
Guest,
}
public class Address
{
public string Line { get; set; }
public string City { get; set; }
public string PostalCode { get; set; }
public string Country { get; set; }
}
}
2.在Controllers中的HomeController中編寫如下程式碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MVCModels.Models;
namespace MVCModels.Controllers
{
public class HomeController : Controller
{
private Person[] personDate = {
new Person { PersonId = 1, FirstName = "Adam", LastName = "Freeeman", Role = Role.Admin},
new Person { PersonId = 2, FirstName = "Jacqui", LastName = "Griffyth", Role = Role.User},
new Person { PersonId = 1, FirstName = "John", LastName = "Smith", Role = Role.Guest},
};
public ActionResult Index( int id = 1 )
{
Person dataItem = personDate.Where(p => p.PersonId == id).First();
return View(dataItem);
}
public ActionResult CreatePerson()
{
return View(new Person());
}
[HttpPost]
public ActionResult CreatePerson(Person model)
{
return View("Index",model);
}
}
}
3.在檢視(Views)中新增createPerson檢視,程式碼示例如下
@model MVCModels.Models.Person
@{
ViewBag.Title = "CreatePerson";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>CreatePerson</h2>
@using (Html.BeginForm())
{
<div>
<label>
@Html.LabelFor(m => m.PersonId);
@Html.LabelFor(m => m.PersonId);
</label>
</div>
<div>
<label>
@Html.LabelFor(m => m.FirstName);
@Html.EditorFor(m => m.FirstName);
</label>
</div>
<div>
<label>
@Html.LabelFor(m => m.LastName);
@Html.EditorFor(m => m.LastName);
</label>
</div>
<div>
<label>
@Html.LabelFor(m => m.Role);
@Html.EditorFor(m => m.Role);
</label>
</div>
<button type="submit">Submit</button>
}
4.最後在index檢視中再進行程式碼編寫,程式碼示例如下
@model MVCModels.Models.Person
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Person</h2>
<div>
<label>ID:</label>
@Html.DisplayFor(m => m.PersonId)
</div>
<div>
<label>First Name:</label>
@Html.DisplayFor(m => m.FirstName)
</div>
<div>
<label>Role</label>
@Html.DisplayFor(m => m.Role)
</div>
(六)控制器和動作
(1)概念:在Asp.Net Mvc框架裡面,控制器是包含必要的處理請求.Net類,控制器的角色封裝了應用程式邏輯,而控制器主要負責處理請求,對模型操作,選擇檢視呈現給使用者。
過濾器
過濾器型別 | 介面 | 預設實現 | 描述 |
---|---|---|---|
Action | IActionFilter | ActionFilterAttribute | 在動作方法之前及之後執行 |
Result | IResultFilter | ActionFilterAttribute | 在動作結果被執行之前和之後執行 |
AuthorizationFilter | IAuthorizationFilter | AuthorizeAttribute | 首先執行,在任何其它過濾動作方法之前 |
Exception | IExceptionFilter | HandleErrorAttribute | 只在另一個過濾器,動作方法,動作結果出現異常時執行 |
(七)Mvc Web API
(1)它是WCF開發出來的輕量級資料獲取技術,它使用了基礎的HTTP協議
(2)Web API 框架是一個面向 Http 協議的通訊框架。對於 WCF 而言,Web API 只面向於 Http 協議設計,而且沒有 WCF 那麼繁瑣的配置。Web API 的開發類似於 ASP.NET MVC 中控制器的開發,但是相對於直接使ASP.NET MVC 來返回 Json 物件的方式而言,Web API 封裝了資料的序列化、反序列化,介面、實現都更加簡單。
說明:以上得內容尚未完善,過段時間補齊