ASP.NET程序設(shè)計(jì)教程(C#版)第4版 課件 第11、12章 LINQ to SQL數(shù)據(jù)庫(kù)操作ASP.NET MVC_第1頁(yè)
ASP.NET程序設(shè)計(jì)教程(C#版)第4版 課件 第11、12章 LINQ to SQL數(shù)據(jù)庫(kù)操作ASP.NET MVC_第2頁(yè)
ASP.NET程序設(shè)計(jì)教程(C#版)第4版 課件 第11、12章 LINQ to SQL數(shù)據(jù)庫(kù)操作ASP.NET MVC_第3頁(yè)
ASP.NET程序設(shè)計(jì)教程(C#版)第4版 課件 第11、12章 LINQ to SQL數(shù)據(jù)庫(kù)操作ASP.NET MVC_第4頁(yè)
ASP.NET程序設(shè)計(jì)教程(C#版)第4版 課件 第11、12章 LINQ to SQL數(shù)據(jù)庫(kù)操作ASP.NET MVC_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第11章LINQtoSQL數(shù)據(jù)庫(kù)操作本章講述的主要內(nèi)容11.1LINQ的概念11.2使用LinqDataSource控件11.3使用LINQtoSQL的對(duì)象和方法11.4實(shí)訓(xùn)使用LINQtoSQL操作數(shù)據(jù)庫(kù)

11.1LINQ的概念11.1.1LINQ的構(gòu)成LINQ的組成架構(gòu)如圖所示。11.1LINQ的概念11.1.2與LINQ相關(guān)的幾個(gè)概念1.匿名類型“匿名類型”也稱為“隱式類型”或“推斷類型”,如果在程序中需要使用到臨時(shí)類型,而又不希望去創(chuàng)建相應(yīng)的類時(shí),可以考慮使用匿名類型。匿名類型使用var關(guān)鍵字進(jìn)行聲明。例如:var

stuinfo=new{StuName="張三",StuID="2009000234",StuAge=20};11.1LINQ的概念11.1.2與LINQ相關(guān)的幾個(gè)概念2.泛型要使用泛型需要引入System.Collections.Generic命名空間。例如,下列語(yǔ)句聲明并初始化了一個(gè)名為MyGeneric,用于表述一個(gè)字符串列表的泛型集合。List<string>MyGeneric=newLinst<string>;MyGeneric.Add("zhangsan");MyGeneric.Add("2009000234");MyGeneric.Add("工程機(jī)械0901");在VisualStudio2008中可以將上述代碼簡(jiǎn)化為如下所示:List<string>MyGeneric=newLinst<string>{"zhangsan","2016000234","工程機(jī)械1601"};11.1LINQ的概念11.1.2與LINQ相關(guān)的幾個(gè)概念3.擴(kuò)展方法使用擴(kuò)展方法可以為一些現(xiàn)有的類增加某種特定的功能。也就是向一個(gè)現(xiàn)有的類中添加新的靜態(tài)方法(注意必須是靜態(tài)的)。創(chuàng)建擴(kuò)展方法的語(yǔ)法格式如下所示:publicstaticclass靜態(tài)類名稱{publicstatic返回值類型方法名稱(this作用類型形參1[,形參2]……){擴(kuò)展方法的方法體語(yǔ)句}}11.1LINQ的概念11.1.2與LINQ相關(guān)的幾個(gè)概念4.Lambda表達(dá)式

Lambda表達(dá)式是.NETFramework3.5的一個(gè)新特性,它提供了一種極為簡(jiǎn)潔的定義方法的方式。它是從.NETFramework1.0中的“委托”和.NETFramework2.0中的“匿名方法”過(guò)渡而來(lái)的。(1)委托:委托實(shí)際上是一個(gè)函數(shù)指針,將問(wèn)題的處理指向一個(gè)方法。(2)匿名方法:在實(shí)際應(yīng)用中被調(diào)用方法的具體名稱無(wú)關(guān)緊要,關(guān)鍵是方法體的返回值。所以在.NETFramework2.0中引入了“匿名方法”的概念。如下列代碼所示,使用匿名方法無(wú)需首先創(chuàng)建方法,而是將方法體語(yǔ)句直接書寫到委托實(shí)例化語(yǔ)句中,并用大括號(hào)將其括起來(lái)

11.1LINQ的概念11.1.2與LINQ相關(guān)的幾個(gè)概念4.Lambda表達(dá)式

(3)過(guò)渡到Lambda表達(dá)式

Lambda表達(dá)式是一個(gè)匿名函數(shù),它可以包含表達(dá)式和語(yǔ)句塊??捎糜趧?chuàng)建委托或表達(dá)式目錄樹類型。所有Lambda表達(dá)式都使用Lambda運(yùn)算符“=>”,該運(yùn)算符讀為“goesto”。該運(yùn)算符的左邊是輸入?yún)?shù)(如果有的話),右邊包含表達(dá)式或語(yǔ)句塊。11.1LINQ的概念11.1.2與LINQ相關(guān)的幾個(gè)概念5.對(duì)象關(guān)系設(shè)計(jì)器對(duì)象關(guān)系設(shè)計(jì)器也稱為O/R設(shè)計(jì)器,用來(lái)自動(dòng)生成與數(shù)據(jù)庫(kù)表對(duì)應(yīng)的DataConText類。DataConText類是LINQtoSQL框架的主入口點(diǎn),所有實(shí)體對(duì)象與關(guān)系型數(shù)據(jù)庫(kù)中數(shù)據(jù)的轉(zhuǎn)換就是依靠DataConText類來(lái)完成的。創(chuàng)建DataConText類可以通過(guò)手工的方法,也可以使用O/R設(shè)計(jì)器自動(dòng)完成。當(dāng)我們向ASP.NET網(wǎng)站中添加一個(gè)“LINQtoSQL類”時(shí),系統(tǒng)將自動(dòng)打開O/R設(shè)計(jì)器。從服務(wù)器資源管理器窗口中,將數(shù)據(jù)庫(kù)表、存儲(chǔ)過(guò)程等拖動(dòng)到O/R設(shè)計(jì)器中,即可自動(dòng)生成需要的DataConText類或方法。11.2使用LinqDataSource控件11.2.1創(chuàng)建DataContext類5.對(duì)象關(guān)系設(shè)計(jì)器1)添加一個(gè)LINQtoSQL類的新項(xiàng)2)屏幕自動(dòng)切換到O/R設(shè)計(jì)器窗口3)數(shù)據(jù)表從服務(wù)器資源管理器中拖動(dòng)到O/R設(shè)計(jì)器的左窗格11.2使用LinqDataSource控件11.2.2配置LinqDataSource使用LinqDataSource配置向?qū)А?1.2使用LinqDataSource控件11.2.3LinqDataSource控件使用示例本節(jié)將以一個(gè)實(shí)例說(shuō)明使用LinqDataSource控件配合FormView控件現(xiàn)實(shí)常規(guī)數(shù)據(jù)庫(kù)操作的方法。

參閱源代碼:ex11-211.3使用LINQtoSQL的對(duì)象和方法11.3.1返回?cái)?shù)據(jù)表中的全部記錄(select語(yǔ)句)1.返回全部記錄的全部列下面的代碼說(shuō)明了在此基礎(chǔ)上如何使用LINQtoSQL返回?cái)?shù)據(jù)表StudentInfo中所有數(shù)據(jù)的方法。protectedvoidButton1_Click(objectsender,EventArgse){DataClassesDataContext

db=new

DataClassesDataContext();

var

Stuinfo=fromStuTablein

db.StudentInfoselectStuTable;GridView1.DataSource=Stuinfo;GridView1.DataBind();}11.3使用LINQtoSQL的對(duì)象和方法11.3.1返回?cái)?shù)據(jù)表中的全部記錄(select語(yǔ)句)2.返回全部記錄的部分字段如果希望只返回全部記錄的部分字段值(例如,只返回“學(xué)號(hào)”studentID和“電子郵件”Email),可將select子句改為如下內(nèi)容。其中,new{StuTable.StudentID,StuTable.Email}語(yǔ)句創(chuàng)建了一個(gè)包含了2個(gè)屬性的新匿名類型。selectnew{StuTable.StudentID,StuTable.Email};11.3使用LINQtoSQL的對(duì)象和方法11.3.1返回?cái)?shù)據(jù)表中的全部記錄(select語(yǔ)句)3.返回某條記錄的某個(gè)字段值下列語(yǔ)句表示了從查詢結(jié)構(gòu)中取出某行某列值的方法。語(yǔ)句使用ToList()方法,將sinfo轉(zhuǎn)換成List<>泛型集合后,取出其中的字段值,即將查詢結(jié)果中第一條記錄的StudentID字段值顯示到標(biāo)簽控件中。protectedvoidButton1_Click(objectsender,EventArgse){DataClassesDataContext

db=new

DataClassesDataContext();

var

StuInfo=fromStuTableindb.StudentInfoselectStuTable;Label1.Text=StuInfo.ToList()[0].StudentID;}11.3使用LINQtoSQL的對(duì)象和方法11.3.1返回?cái)?shù)據(jù)表中的全部記錄(select語(yǔ)句)4.遍歷某字段的全部值下列代碼表示了使用foreach循環(huán)遍歷studentID字段,并將該字段的所有值添加到列表框控件ListBox1中的方法。protectedvoidButton1_Click(objectsender,EventArgse){

DataClassesDataContext

db=newDataClassesDataContext();

foreach(varsindb.StudentInfo){

ListBox1.Items.Add(s.StudentID);}}11.3使用LINQtoSQL的對(duì)象和方法11.3.2返回?cái)?shù)據(jù)表中符合條件的部分記錄(Where語(yǔ)句)使用Where語(yǔ)句下列語(yǔ)句(斜體字部分)通過(guò)Where語(yǔ)句設(shè)置了條件表達(dá)式,篩選出專業(yè)為“軟件技術(shù)”,且“1991-02-01”前出生的所有記錄。protectedvoidLinqWhere_Click(objectsender,EventArgse){

DataClassesDataContext

db=newDataClassesDataContext();

var

StuInfo=fromStuTableindb.StudentInfo

whereStuTable.Specialty=="軟件技術(shù)"&&

StuTable.DateOfBirth<DateTime.Parse("1991-02-01")selectStuTable;GridView1.DataSource=StuInfo;GridView1.DataBind();}11.3使用LINQtoSQL的對(duì)象和方法11.3.2返回?cái)?shù)據(jù)表中符合條件的部分記錄(Where語(yǔ)句)2.使用Where()方法通常將上面代碼的編寫方式稱為“語(yǔ)句方式”,將使用Lambda表達(dá)式的編寫方式稱為“方法方式”,實(shí)現(xiàn)程序功能的方法方式代碼如下所示。代碼中斜體字部分使用db.StudentInfo對(duì)象的Where()方法,并使用Lambda表達(dá)式表示了查詢條件。程序的返回結(jié)果與上例完全相同。protectedvoidLinqWhere_Click(objectsender,EventArgse){

DataClassesDataContext

db=newDataClassesDataContext();

var

StuInfo=db.StudentInfo.Where(m=>m.Specialty=="軟件技術(shù)"&&

m.DateOfBirth<DateTime.Parse("1991-02-01"));GridView1.DataSource=StuInfo;GridView1.DataBind();}11.3使用LINQtoSQL的對(duì)象和方法11.3.2返回?cái)?shù)據(jù)表中符合條件的部分記錄(Where語(yǔ)句)3.Single()和SingleOrDefault()方法如果希望從數(shù)據(jù)庫(kù)中返回單獨(dú)的一條記錄,可使用Single()或SingleOrDefault()方法。其中:1)Single()方法:用于返回符合條件的單獨(dú)一條記錄,在沒有找到任何匹配記錄時(shí)將拋出一個(gè)異常。2)SingleOrDefault()方法:用于返回符合條件的單獨(dú)一條記錄,在沒有找到任何匹配的記錄時(shí)將返回null。11.3使用LINQtoSQL的對(duì)象和方法11.3.2返回?cái)?shù)據(jù)表中符合條件的部分記錄(Where語(yǔ)句)4.返回字段值包含特定字符串的記錄可以在LINQtoSQL查詢中使用的字符串方法有許多,如:Length、Substring、Contains、StartsWith、EndsWith、IndexOf等等。11.3使用LINQtoSQL的對(duì)象和方法11.3.3返回?cái)?shù)據(jù)集合的排序(OrderBy方法)使用OrdreBy()方法或OrderByDescending()方法,可以實(shí)現(xiàn)返回記錄的升序或降序排列。protectedvoidLinqOrderBy_Click(objectsender,EventArgse){

DataClassesDataContext

db=new

DataClassesDataContext();GridView1.DataSource=db.StudentInfo.OrderBy(m=>m.DateOfBirth);GridView1.DataBind();}11.3使用LINQtoSQL的對(duì)象和方法11.3.4連接不同數(shù)據(jù)表(Join語(yǔ)句)如果希望將數(shù)據(jù)庫(kù)中不同表的字段組成一個(gè)來(lái)自多個(gè)表的查詢返回集合,需要使用LINQtoSQL提供的Join語(yǔ)句。

參閱源代碼:ex11-311.3使用LINQtoSQL的對(duì)象和方法11.3.5插入新記錄使用LINQtoSQL向數(shù)據(jù)表中插入一條記錄的方法十分簡(jiǎn)單,在創(chuàng)建了DataContext類和數(shù)據(jù)表實(shí)體對(duì)象后,只要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)表對(duì)象的實(shí)例,并為該實(shí)例的各個(gè)字段賦值,最后調(diào)用數(shù)據(jù)表對(duì)象的InsertOnSubmit()方法,將數(shù)據(jù)表對(duì)象實(shí)例添加到表,調(diào)用DataContext類對(duì)象的SubmitChanges()更新數(shù)據(jù)庫(kù)即可。11.3使用LINQtoSQL的對(duì)象和方法11.3.6修改記錄使用LINQtoSQL技術(shù)修改數(shù)據(jù)庫(kù)記錄的操作與添加新記錄十分相似,在創(chuàng)建了DataContext類和數(shù)據(jù)表實(shí)體對(duì)象后,首先需要查詢到希望修改的記錄,而后為查詢結(jié)果對(duì)象中的各個(gè)字段賦以新值,最后調(diào)用DataContext類對(duì)象的SubmitChanges()方法即可。11.3使用LINQtoSQL的對(duì)象和方法11.3.7刪除記錄使用LINQtoSQL技術(shù)刪除數(shù)據(jù)庫(kù)記錄的操作與更新記錄十分相似,在創(chuàng)建了DataContext類和數(shù)據(jù)表實(shí)體對(duì)象后,首先需要查詢到希望修改的記錄,而后調(diào)用數(shù)據(jù)表實(shí)體對(duì)象的DeleteOnSubmit()方法,最后調(diào)用DataContext類對(duì)象的SubmitChanges()方法即可。11.3使用LINQtoSQL的對(duì)象和方法11.3.8使用LINQtoSQL直接執(zhí)行SQL語(yǔ)句

1.GetCommand()方法

2.ExecuteCommand()方法

DataContext類提供的ExecuteCommand()方法可用于直接對(duì)數(shù)據(jù)庫(kù)執(zhí)行一個(gè)沒有返回值的SQL命令。注意,在書寫SQL語(yǔ)句時(shí)表名稱、字段名需要用方括號(hào)“[]”將其括起來(lái)。

3.ExecuteQuery()方法

DataContext類提供的ExecuteQuery()方法用于直接執(zhí)行一個(gè)SQL查詢,該方法返回一個(gè)IEnumerable<T>類型的泛型集合。11.4實(shí)訓(xùn)使用LINQtoSQL操作數(shù)據(jù)庫(kù)11.4.1實(shí)訓(xùn)目的①進(jìn)一步理解創(chuàng)建和使用DataContext類的基本方法。②掌握常用LINQtoSQL語(yǔ)句和方法,掌握通過(guò)LINQtoSQL語(yǔ)句或方法實(shí)現(xiàn)常規(guī)數(shù)據(jù)庫(kù)操作的基本步驟。11.4.2實(shí)訓(xùn)要求使用LINQtoSQL語(yǔ)句和方法,配合GridView、LinqDataSource等控件,設(shè)計(jì)一個(gè)能對(duì)SQLServer數(shù)據(jù)庫(kù)StudentDB中StudentInfo表進(jìn)行查詢、添加、修改或刪除操作的ASP.NET應(yīng)用程序。第12章ASP.NETMVC本章講述的主要內(nèi)容12.1ASP.NETMVC概述12.2ASP.NETMVC路由12.3ASP.NETMVC控制器12.4ASP.NETMVC視圖和模型12.5實(shí)訓(xùn)設(shè)計(jì)一個(gè)用戶管理程序

12.1ASP.NETMVC概述ASP.NETMVC是Microsoft推出的新型ASP.NET應(yīng)用程序開發(fā)模式,MVC是模型(Model)、視圖(View)和控制器(Controller)3個(gè)單詞的縮寫,它意味著這種開發(fā)模式將一個(gè)應(yīng)用程序分為模型、視圖和控制器3個(gè)組成部分。VisualStudio2015中內(nèi)置的MVC版本為ASP.NETMVC5。12.1.1MVC的構(gòu)成1.模型(Model)2.視圖(View)3.控制器(Controller)12.1ASP.NETMVC概述12.1.1MVC的構(gòu)成4.MVC的工作原理12.1ASP.NETMVC概述12.1.2Razor語(yǔ)法

ASP.NETMVC5默認(rèn)使用Razor語(yǔ)法來(lái)設(shè)計(jì)動(dòng)態(tài)網(wǎng)頁(yè)。由于Razor是通過(guò)System.Web.Mvc下的RazorViewEngine類來(lái)實(shí)現(xiàn)的,所以也稱為“Razor視圖引擎”。在ASP.NETMVC5項(xiàng)目中使用的Razor視圖引擎為基于Razor語(yǔ)法的Web網(wǎng)頁(yè)第3版(也稱為ASP.NETWebPages3)。Razor的特點(diǎn)①利用Razor可以在視圖(.cshtml)文件中混合使用C#和HTML、JavaScript、jQuery等服務(wù)器端和客戶端語(yǔ)言。②Razor有非常簡(jiǎn)潔的語(yǔ)法格式。在視圖文件中只需要使用一個(gè)“@”符號(hào)就可以表示C#語(yǔ)句塊或內(nèi)聯(lián)表達(dá)式。③Razor能自動(dòng)對(duì)網(wǎng)頁(yè)中輸入的字符串進(jìn)行HTML編碼,可以有效地防范客戶端腳本攻擊。12.1ASP.NETMVC概述12.1.2Razor語(yǔ)法2.使用Razor

(1)使用@標(biāo)記@標(biāo)記表示其后跟隨的是C#代碼的一個(gè)內(nèi)聯(lián)表達(dá)式、單行語(yǔ)句或一個(gè)語(yǔ)句塊。(2)使用@Html.Raw()方法對(duì)于HTML代碼中出現(xiàn)的@符號(hào)本身或雙引號(hào)、單引號(hào)等特殊符號(hào),可以通過(guò)@Html.Raw()方法進(jìn)行轉(zhuǎn)義。12.1ASP.NETMVC概述12.1.3創(chuàng)建MVC應(yīng)用程序參閱源代碼:ex12-112.1.4ASP.NETMVC項(xiàng)目的組成1.應(yīng)用程序信息文件①Properties文件夾:項(xiàng)目屬性文件夾,其中包含有一個(gè)名為“AssemblyInfo.cs”,用于保存程序集信息(如,名稱、版本、版權(quán)等)的文件。該文件由項(xiàng)目屬性窗口中各選項(xiàng)生成,一般不需要手工編輯。②引用文件夾(bin):用于存放系統(tǒng)運(yùn)行所必須的外部引用(各類.dll文件)。12.1ASP.NETMVC概述12.1.4ASP.NETMVC項(xiàng)目的組成2.項(xiàng)目文件夾

App_Data文件夾:用于存放項(xiàng)目中使用的數(shù)據(jù)文件或數(shù)據(jù)庫(kù)文件,作用及功能與WebForms項(xiàng)目中App_Data文件夾相同。

App_Start文件夾:用于存放配置類的代碼文件,默認(rèn)包含有一個(gè)名為“RouteConfig.cs”的路由配置文件,也就是ASP.NETMVC項(xiàng)目的“路由表”。

Controllers文件夾:用于存放項(xiàng)目中所有控制器文件的文件夾。

Models文件夾:用于存放項(xiàng)目中所有模型文件的文件夾。

Views文件夾:用于存放項(xiàng)目中所有視圖的文件夾。每個(gè)視圖以對(duì)應(yīng)控制器名為子文件夾名,視圖文件的擴(kuò)展名為.cshtml。12.1ASP.NETMVC概述12.1.4ASP.NETMVC項(xiàng)目的組成3.配置文件①ApplicationInsights.config:監(jiān)視配置文件,用于設(shè)置如何監(jiān)視應(yīng)用程序的運(yùn)行情況。②Global.asax:全局配置文件,用于設(shè)置全局URL路由的默認(rèn)值,在應(yīng)用程序啟動(dòng)時(shí)可通過(guò)該文件執(zhí)行一些特殊操作。③packages.config:項(xiàng)目中附加的軟件包配置文件,由系統(tǒng)自動(dòng)生成和管理,一般不需要程序員編寫和修改。④Web.config:XML格式的網(wǎng)站或文件夾的配置文件。其作用與WebForms項(xiàng)目中的web.config文件相同。12.2ASP.NETMVC路由MVC路由是指用來(lái)將用戶請(qǐng)求與控制器對(duì)應(yīng)的處理方法進(jìn)行關(guān)聯(lián)的設(shè)置,它也是除了模型、視圖和控制器外最為重要的一個(gè)概念,它分為入站和出站路由兩種類型。在前面幾章介紹過(guò)的WebForms開發(fā)模式中所有的用戶請(qǐng)求都會(huì)指向一個(gè)物理存在的文件(如.aspx、html等),而在MVC中用戶請(qǐng)求則一律指向控制器中某個(gè)操作方法,并由該方法決定下一步的操作(打開視圖、獲取數(shù)據(jù)等)。12.2.1MVC路由1.注冊(cè)路由所謂“注冊(cè)路由”就是通過(guò)存放在App_Start文件夾下的RouteConfig.cs所表述的RouteConfig類中定義的RegisterRoutes()方法,將URL、控制器及對(duì)應(yīng)的Action關(guān)聯(lián)起來(lái)12.2ASP.NETMVC路由12.2.1MVC路由2.從URL向控制器傳遞數(shù)據(jù)MVC程序中可以通過(guò)Controller類的RouteData屬性或查詢字符串Request.QueryString[]進(jìn)行頁(yè)面間的數(shù)據(jù)傳遞。

參閱源代碼:ex12-212.2ASP.NETMVC路由12.2.2通過(guò)路由實(shí)現(xiàn)超鏈接和頁(yè)面跳轉(zhuǎn)1.通過(guò)路由創(chuàng)建超鏈接在ASP.NETMVC項(xiàng)目中如果希望請(qǐng)求一個(gè)特殊的路由,可以使用HtmlHelper類中的RouteLink()方法,該方法用于動(dòng)態(tài)的在頁(yè)面中生成一個(gè)超鏈接。2.通過(guò)路由實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)在ASP.NETMVC項(xiàng)目中仍然可以使用Response.Redirect()方法實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)。而更常用的方式是利用事先定義好的路由來(lái)實(shí)現(xiàn)頁(yè)面間的跳轉(zhuǎn)。12.3ASP.NETMVC控制器控制器繼承于Controller類,Controller又繼承于ControllerBase類。但由于ControllerBase類中包含的成員數(shù)量較少,而Controller卻包含有非常豐富的成員,所以Controller類是控制器的默認(rèn)實(shí)現(xiàn),它負(fù)責(zé)以下幾個(gè)處理階段的工作:①查找要調(diào)用的Action方法,并驗(yàn)證該方法是否可以被調(diào)用。②獲取要執(zhí)行的Action方法的參數(shù)。③處理在執(zhí)行操作期間可能發(fā)生的錯(cuò)誤。④提供呈現(xiàn)視圖的默認(rèn)引擎。在一個(gè)控制器中可以定義一個(gè)或多個(gè)Action方法,一個(gè)Action方法可以也控制一個(gè)或多個(gè)視圖。12.3ASP.NETMVC控制器12.3.1控制器的常用屬性和方法1.ViewData和ViewBag屬性

ViewData屬性是一個(gè)ViewDataDictionary對(duì)象,是一個(gè)不區(qū)分大小寫的由“鍵/值”(Key/Value)對(duì)組成的字典類型集合,也就是說(shuō)ViewData中的每一個(gè)元素都由“鍵”和“值”一對(duì)數(shù)據(jù)組成。

ViewBag屬性時(shí)ViewData的另一種表示形式,也是一種由“鍵/值”(Key/Value)對(duì)組成的字典類型集合。該屬性返回的是一種動(dòng)態(tài)數(shù)據(jù)類型(Dynamic),這種數(shù)據(jù)類型只有在進(jìn)行編譯時(shí)才會(huì)被系統(tǒng)處理。12.3ASP.NETMVC控制器12.3.1控制器的常用屬性和方法2.TempData屬性

TempData屬性的作用與ViewData和ViewBag相似,也用來(lái)向視圖傳遞數(shù)據(jù)。不同的是它可以實(shí)現(xiàn)在不同視圖間進(jìn)行數(shù)據(jù)傳遞。此外,TempData是一個(gè)臨時(shí)的鍵值對(duì)數(shù)據(jù)集合,只能在當(dāng)前請(qǐng)求時(shí)讀取該對(duì)象,再次請(qǐng)求時(shí)其中的所有數(shù)據(jù)都會(huì)自動(dòng)變成null。從MVC內(nèi)部的實(shí)現(xiàn)來(lái)看,TempData實(shí)際上是通過(guò)Session來(lái)實(shí)現(xiàn)的,這樣既可以區(qū)分不同的訪問(wèn)者,又能及時(shí)清除這些暫存的數(shù)據(jù)。

TempData的另一個(gè)典型用法是,在數(shù)據(jù)重定向到另一個(gè)Action方法之前先通過(guò)TempData存儲(chǔ)要傳遞的數(shù)據(jù),而后再?gòu)牧硪粋€(gè)Action中得到這些數(shù)據(jù)。12.3ASP.NETMVC控制器12.3.1控制器的常用屬性和方法3.Server屬性控制器中,利用Controller類公開的Server屬性可以獲取ControllerBase類中定義的HttpServerUtility對(duì)象,然后通過(guò)該對(duì)象在服務(wù)器上執(zhí)行一些特定的操作。

例如,對(duì)HTML字符串和URL字符串進(jìn)行編碼和解碼、將虛擬路徑轉(zhuǎn)換成物理路徑等。4.Request和Response屬性在Action方法或視圖的C#代碼塊中,通過(guò)Request屬性可以獲取HttpRequestBase對(duì)象,從而進(jìn)一步調(diào)用該對(duì)象提供的一些屬性和方法。12.3ASP.NETMVC控制器12.3.2控制器的Action方法1.Action方法參數(shù)的來(lái)源和映射ASP.NETMVC框架可以將Action方法中的參數(shù)值自動(dòng)映射到Action方法。在默認(rèn)情況下,若Action方法帶有參數(shù),則ASP.NETMVC會(huì)檢查是否存在同名參數(shù),若有則自動(dòng)傳遞給Action方法,無(wú)需再編寫從請(qǐng)求中獲取參數(shù)的代碼。2.ActionResult的返回值類型

ActionResult類使所有操作結(jié)果的基礎(chǔ),多數(shù)Action方法會(huì)返回從該類派生的子類實(shí)例。例如,常見的操作是調(diào)用View()方法返回一個(gè)從ActionResult類派生的ViewResult類的實(shí)例。當(dāng)然也可以根據(jù)實(shí)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論