APS.NET MVC + EF (03)---初始MVC

3.1 MVC簡介

MVC(Model-View-Controller,模型—視圖—控制器模式)用於表示一種軟件架構模式。它把軟件系統分爲三個基本部分:模型(Model),視圖(View)和控制器(Controller)。Asp.net MVC是微軟提供的MVC開發框架。web

MVC將UI層分爲了三個部分: 數據庫

  • 模型:一組類,描述了要處理的數據以及修改和操做數據的業務規則。
  • 視圖:定義應用程序界面的顯示方式。
  • 控制類:一組類,用於處理來自用戶、整個應用程序流以及特定應用程序邏輯的通訊。

3.2 第一個Asp.net MVC 應用程序

3.2.1 建立ASP.NET MVC 應用

用VS建立了一個新的ASP.NET MVC應用程序後,將自動向這個項目中添加一些文件和目錄,如圖所示3-1所示。跨域

   

圖3-1 asp.net mvc 項目目錄結構 瀏覽器

表3-1是對目錄的說明 服務器

表3-1 asp.net mvc程序結構說明 架構

目錄mvc

用途框架

/Controllerasp.net

用於保存那些處理URL請求的Controller的派生類工具

/Models

用於保存那些表示和操縱數據以及業務對象的類

/Views

存那些負責呈現輸出結果(如HTML)的UI模板文件

/Scripts

保存Js庫文件和腳本

/fonts

用於保存Bootstrap模板系統中的字體文件

Content

用於保存CSS、圖像和其餘站點的內容,而非腳本

/App_Data

保存想要讀取/寫入的數據文件好比.mdf的本地數據庫文件

/App_Start

保存一些同能的配置代碼,路由等

     

3.2.2 ASP.NET MVC 工做原理

MVC模式的工做過程如圖3-2所示。

 

圖3-2 MVC工做過程

客戶端的所請求的URL是被映射到相應的Controller去,而後由Controller來處理業務邏輯,或許要從Model中取數據,而後再由Controller選擇合適的View返回給客戶端。

     

咱們運行的ASP.NET MVC程序訪問的http://localhost:2176/Home/Index這個URL,它訪問的實際上是HomeController中的Index這個Action,如圖3-3所示。

 

圖3-3 URL對應關係

其中 public ActionResult Index() 這個方法稱爲Controller的Action,他返回的是ActionResult的類型。一個Controller能夠有不少個Action。

那麼一個URL是怎樣被定位到Controller中來的呢?它是經過"路由"完成的,默認代碼以下:

public class RouteConfig

{

public static void RegisterRoutes(RouteCollection routes)

{

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

     

routes.MapRoute(

name: "Default",

url: "{controller}/{action}/{id}",

defaults: new { controller = "Home", action = "Index",

id = UrlParameter.Optional }

);

}

}

RegisterRoutes()方法的做用就是定義路由,即定義URL訪問規則。咱們能夠看到這裏定義了一個名爲"Default"的Route,還定義了默認的參數。默認參數的意義在於,當咱們訪問例如http://localhost:2176/的URL的時候,他會將不存在的參數用默認的參數補上,也就是至關於訪問http://localhost:2176/Home/Index同樣。

     

在控制器中,使用View()方法調用視圖,返回和動做方法同名的視圖,可是卻沒有顯示提供視圖的位置。其實這裏依賴的是視圖的尋址規則,即會按照規則從規定的路徑去尋找這個命名的視圖。在ASP.NET MVC中,有一條尋址規則,就是從Views文件夾下和控制器名同名的文件夾中尋找。

ASP.NET MVC程序對於一次請求的處理過程如圖3-4所示。最開始應用程序啓動,註冊路由;當請求到來時,尋找路由表找到負責處理的控制器和動做方法,交給該動做方法處理;動做方法處理完畢,根據尋址規則找到視圖,由視圖負責頁面呈現。

 

圖3-4 ASP.NET MVC 工做過程

     

ASP.NET MVC框架的一大特色就是"約定勝於配置",即一些規則是約定好的,不須要經過配置文件去配置。咱們約定:

  • 全部的控制器都以Controller結尾。
  • 應用程序中全部視圖都有一個統一的Views主目錄。
  • 在Views主目錄下放置和控制器同名的子目錄。

     

3.3 ASP.NET 系統對象

對象名稱

說明

Request

用來獲取客戶端在web請求期間發送的值,如URL參數、表單值等

Response

用來負責返回到客戶端的HTTP輸出

Application

做用於整個應用程序運行期間的狀態對象,可用來保存整個應用程序的配置參數

Session

會話狀態保持對象

Cookie

客戶端保持會話信息的方式

Server

用於進行一些服務器端處理的工具對象,如URL,編碼解碼

HttpContext

封裝有關個別HTTP請求的全部HTTP特定信息

     

3.3.1 Request對象

Request對象的經常使用成員以下:

成員

說明

String ContextType

獲取設置傳入請求的MIME內容類型

HttpCookieCollection Cookies

獲取客戶端發送的Cookie的集合

HttpFileCollection Files

獲取由客戶端上傳的文件集合

NameValueCollection Form

獲取表單提交的數據

NameValueCollection Headers

獲取Http頭信息

NameValueCollection QueryString

獲取Http查詢字符串變量集合

String RawUrl

獲取當前請求的原始URL

NameValueCollection ServerVariables

獲取web服務器變量集合

String UserAgent

獲取客戶端瀏覽器的原始用戶代理信息

String UserHostAddress

獲取遠程客戶端的IP地址

String MapPath(path)

將指定的虛擬路徑映射到物理路徑

Save()

HTTP請求保存到磁盤

     

3.3.2 Response對象經常使用成員

成員

說明

String ContentType

獲取或設置輸出流的HTTP MIME類型

HttpCookieCollection Cookies

獲取相應Cookie的集合

NameValueCollection Headers

獲取相應標頭的集合

Redirect(url)

將請求重定向到新的URL

Write(data)

將一個字符串寫入HTTP相應輸出流

     

3.3.3 Server對象經常使用成員

經常使用成員

說明

string MapPath(path)

返回與Web服務器上的指定虛擬路徑相對應的物理文件路徑

Transfer

使用指定的path路徑進行轉發

string UrlDecode

對字符串進行URL編碼

string UrlEncode

對字符串進行URL解碼

     

3.3.4 Session對象

在Asp.net 中,Session以key-value的方式在服務器端保存數據,它的使用方式很是簡單,以下。

Session["Session名稱"] = 值; //存值

變量 = Session["Session名稱"]; //取值

Session對象經常使用成員:

經常使用成員

說明

string SessionId

包含惟一用戶會話標識符,它可用與整個會話過程記錄用戶的信息

int Timeout

用戶超時的時間,單位分鐘。在該段時間內,用戶即便沒有任何操做用戶的狀態也不會清除。若是一段時間內沒有操做,服務器沒法知道用戶是否在線,因此Session中的數據生存期以超時時間爲限

Abandon()

結束Session,取消當前會話

Add(name,value)

添加Session數據

Remove(name)

刪除數據

     

3.3.5 Cookie對象

語法:

Response.Cookies[Cookie的名稱].Value = 變量值; //寫入Cookie

string 變量 = Request.Cookies[Cookie的名稱].Value; //讀取Cookie

     

經常使用成員

說明

string Name

Cookie對象名稱

string Value

Cookie對象的內容

DataTime Expires

Cookie對象的有效時間。若是沒有設置Cookie的失效日期,它們僅保存到關閉瀏覽器程序爲止;若是Cookie對象的Expires屬性設置爲DateTime.MaxValue,則表示Cookie永遠不會過時

     

3.3.6 HttpContext對象

經常使用成員

說明

HttpApplicationState

Application

Application對象

HttpRequest Request

Request對象

HttpResponse

Response對象

HttpServerUtility

Server

Server對象

HttpSessionState

Session對象

Iprincipal User

User對象

Cache

Cache對象

static HttpContext

Current

爲當前Http請求獲取或設置HttpContext對象

     

3.4 案例:實現用戶登陸

需求:

  1. 記住密碼功能
  2. 登陸用戶信息傳遞

3.4.1 跨域請求Session丟失問題解決方式

   

在登陸控制器中引用命名空間
using System.Web.SessionState;

控制器實現 IRequiresSessionState 接口

public class AccountController : Controller, IRequiresSessionState

{

public ActionResult Login(string loginName,string loginPwd)

{

if (loginName=="admin" && loginPwd=="sa")

{

Session["User"] = "admin"; //可直接使用

return RedirectToAction("index", "book");

}

}

}

相關文章
相關標籤/搜索