1. 程式人生 > >Asp.Net mvc基礎

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 封裝了資料的序列化、反序列化,介面、實現都更加簡單。

 

說明:以上得內容尚未完善,過段時間補齊