第1章 進入ASP.NET MVC世界
第1章 進入ASP.NET MVC世界
ASP.NET 概述
目前開發B/S系統的主要技術有ASP.NET 、JSP、PHP等。其中ASP.NET是
基於.NET平臺創建動態網頁的一種服務器技術,使用它可以創建動態交互
Web頁面。
圖1.1 .NET Framework與ASP.NET
ASP.NET MVC簡介
ASP.NET MVC是ASP.NET技術的一個子集,他是ASP.NET技術和MVC模的完美結
合,類似與Java的struts框架。
第一個ASP.NET MVC程序
創建ASP.NET MVC應用
首先,打開VS2012,執行“文件”->“新建”->“項目”命令,左邊項
目類型選擇“web”選項,在中間的.NET框架版本下拉列表選擇“.NET Frame
work4.5”選項,選擇“ASP.NET MVC4 Web應用程序”。
項目結構說明如下:
>App_Data文件夾:用來存放系統包含的數據庫文件。
>App_Start文件夾:包含ASP.NET MVC系統啟動的相關類文件。
>Controllers文件夾:放置整個項目的控制器代碼文件。
>Models文件夾:放置整個項目的模版代碼文件。
>Views文件夾:放置整個項目的視圖代碼文件。
>View下的Web.config文件:作用於視圖的配置文件。
>Global.asax文件:全局應用程序文件,一般和App_Start文件夾中的類配合使用。
>packages.config文件:用於管理項目用到的程序集版本。
>根目錄下的Web.config文件:作用於整個項目的配置文件。
Hello,ASP.NET MVC
1.控制器說明
>System.Web命名空間:ASP.NET核心命名空間。
>System.Web.Mvc命名空間:開發ASP.NET MVC的最基本的命名空間。
>Controller類:每個控制器必須繼承的基類。
>Index()方法:控制器的動作方法,用於響應客戶端請求,並調用相應的視圖輸出信息。
2.基本規則
控制器都已Controller結尾,比如HomeController,當我們創建一個動作
方法Index(),那麽如果讓這個方法返回視圖,它會默認找View文件夾下和控制
器名的文件夾Home,在找文件加下和動作方法重名的Index視圖。
ASP.NET MVC程序的工作原理
1 Global.asax
在ASP.NET程序中,Global.asax主要是在系統啟動時做一些全局性的工
作。從上述代碼可以看出,它調用App_Start文件夾中的相關類來完成這些工
作,如調用RouteConfig.Register Routes()來完成路由註冊;調用
FilterConfig.RegisterGlobalFilters()來完成全局過濾器(類似與Struts中
的攔截器)的註冊。
2RouteConfig.cs文件
這裏RegisterRoutes()方法的作用就是定義路由,即定義URL訪問規則。
3視圖命名和尋址規則
4Web服務器
Web.config中有一項和調試相關的配置,如下所示。
<compilation debug="true" targetFramework="4.5" />
其中,debug=”true”即表示支持調試,在正式發布後,debug還需要設置為
false
ASPX視圖
ASPX視圖的聲明和編碼
1@Page指令
表1-3 @Page指令常用屬性 |
|
屬性 |
說明 |
Language |
指定頁面代碼和後置代碼使用的語言,需要註意的是這裏只支持微軟.net框架中的語言 |
Inherits |
繼承的頁面類,ASPX視圖一般繼承System.Web.ViewPage和 System.Web.View<T>兩種類型 |
ContentType |
指定MIME類型和頁面回應是所采用的字符編碼方式 |
ValidateRequest |
指定是否驗證請求 |
MasterPageFile |
指定使用的模板視圖文件 |
2@Import指令
在ASPX視圖中,可以通過@Import指令引入新的命名空間.
<%@Import Namespace=”MvcDemo.Helper”%>
3服務器端內嵌語法
<%%>小腳本
<%=%>或<%:%>表達式
<script runat=”server”></script>服務器端腳本塊
母版視圖
1創建母版視圖
<%@MasterLanguage="C#"Inherits="System.Web.Mvc.ViewMasterPage"%>
<!DOCTYPEhtml>
<html>
<headrunat="server">
<metaname="viewport"content="width=device-width"/>
<title><asp:ContentPlaceHolderID="TitleContent"runat="server"/></title>
</head>
<body>
<div>
<asp:ContentPlaceHolderID="MainContent"runat="server">
</asp:ContentPlaceHolder>
</div>
</body>
</html>
2使用母版視圖
<%@PageTitle=""Language="C#"MasterPageFile="~/Views/PartialView/ViewMasterPage1.Master"Inherits="System.Web.Mvc.ViewPage<dynamic>"%>
<asp:ContentID="Content1"ContentPlaceHolderID="TitleContent"runat="server">
View1
</asp:Content>
<asp:ContentID="Content2"ContentPlaceHolderID="MainContent"runat="server">
<h2>View1</h2>
</asp:Content>
3資源文件加載工具方法
Url.Content(“~/css/style.css”)//~代表服務器根目錄
ASP.NET系統對象
ASP.NET系統對象簡介
ASP.NET中常見的系統對象如下表所示
表1-4 ASP.NET系統對象 |
|
對象名稱 |
說明 |
Request |
用來獲取客戶端在Web請求期間發送的值,如URL參數、表單值等。 |
Response |
用來負責返回到客戶端的HTTP輸出 |
Application |
作用於整個程序運行期的狀態對象,可用來保存整個應用程序的配置參數 |
Session |
會話狀態保持對象 |
Cookie |
客戶端保持會話信息的方式 |
Server |
用於進行一些服務器端處理的工具對象,如URL編碼解碼、頁面轉發 |
HttpContext |
封裝有關個別HTTP請求的所有HTTP特定的信息 |
1.Request對象
成員 |
說明 |
string ContentType |
獲取或設置傳入請求的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(string virtualPath) |
指定的虛擬路徑映射到物理路徑 |
void SaveAs(string filename,bool includeHeaders) |
將HTTP請求保存到磁盤 |
2.Response
成員 |
說明 |
string ContentType |
獲取或設置輸出流的HTTP MIME類型 |
HttpCookieCollection Cookies |
獲取響應Cookie集合 |
NameValueCollection Headers |
獲取響應表頭的集合 |
void Redirect(string url) |
將請求重定向到新的URL |
void Write(string s) |
將一個字符串寫入HTTP響應輸出流 |
3.Server對象
常用成員 |
說明 |
string MapPath(string path) |
返回與Web服務器上的指定虛擬路徑相對應的物理文件路徑 |
void Transfer(string path) |
使用指定的path進行頁面轉發 |
string UrlDecode(string s) |
對字符串進行URL編碼 |
string UrlEncode(string s) |
對字符串進行URL編碼 |
4.Session對象
常用成員 |
說明 |
string SessionID |
包含唯一的用戶會話標識符,它可用於在整個會話過程中記錄用戶信息。 |
int Timeout |
用戶超時時間,單位為分鐘,Session中數據的生存期以超時時間為限。 |
void Abandon() |
結束Session,取消當前會話 |
void Add(string name,object value) |
添加Session數據 |
void Remove(string name) |
刪除Session數據 |
5.Cookie對象
常用成員 |
說明 |
string Name |
Cookie對象的名稱 |
string Value |
Cookie對象的內容(值) |
DateTime Expires |
Cookie對象的有效時間。如果沒有設置Cookie的失效日期,它們僅保存到關閉瀏覽器程序為止;如果將Cookie對象的Expires屬性設置為 DateTime.MaxValue,則表示Cookie永遠不會過期。 |
語法:
Response.Cookies[Cookie的名稱].value=變量值;//寫入Cookie
String 變量名=Request.Cookies[Cookie的名稱].Value;//讀取Cookie
或
HttpCookie hcCookie = new HttpCookie(“Cookie的名稱”,”值”);
Response.Cookies.Add(hcCookie);
6.Applicaion對象
語法:
Appliation[“Application名稱”]=值;//存值
變量=Application[“Application名稱”];//取值
7.HttpContext對象
常用成員 |
說明 |
HttpApplicationState Application |
Application對象 |
HttpRequest Request |
Request對象 |
HttpResponse Response |
Response對象 |
HttpServerUtility Server |
Server對象 |
HttpSessionState Session |
Session對象 |
IPrincipal User |
User對象 |
System.Web.Caching.Cache Cache |
Cache對象 |
static HttpContext Current |
為當前HTTP請求獲取或設置 System.Web.HttpContext對象 |
☆在某些特殊情況下,可能需要在其他自定義類中訪問這些對象,這是只需要通過HttpContext的Current屬性就能達到目標,用法如下面代碼所示:
System.Web.HttpContext.Current.Response.Redirect(“~/”);
第1章 進入ASP.NET MVC世界