自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用ASP.NET MVC框架創(chuàng)建電子商務(wù)網(wǎng)站

開發(fā) 后端
此篇通過創(chuàng)建一個(gè)電子商務(wù)網(wǎng)站,討論ASP.NET MVC框架下控制器是如何與視圖做交互的。

這個(gè)系列的第一篇建造了一個(gè)簡(jiǎn)單的電子商務(wù)產(chǎn)品列表/瀏覽網(wǎng)站。它討論了MVC后面的高層次的概念,示范了如何從頭創(chuàng)建一個(gè)新的asp.net mvc項(xiàng)目,實(shí)現(xiàn)和測(cè)試這個(gè)電子商務(wù)產(chǎn)品列表功能。系列的第二篇對(duì)asp.net mvc框架的URL路徑選擇(routing)架構(gòu)做了深入探討,討論了它的工作原理以及你如何使用它來處理更高級(jí)的URL路徑選擇場(chǎng)景。

此篇,將討論控制器是如何與視圖做交互的,具體來說,我將討論你可以把數(shù)據(jù)從控制器傳到視圖以顯示返回到客戶端的回復(fù)的各種方式。

第一部分的扼要簡(jiǎn)述

在這個(gè)系列的第一部分,我們創(chuàng)建了一個(gè)電子商務(wù)網(wǎng)站,實(shí)現(xiàn)了基本的產(chǎn)品列表/瀏覽支持。我們是用asp.net mvc框架實(shí)現(xiàn)這個(gè)網(wǎng)站的,這個(gè)方法會(huì)很自然地將代碼結(jié)構(gòu)化為獨(dú)特的控制器,模型和視圖組件。

當(dāng)瀏覽器向我們的網(wǎng)站發(fā)送一個(gè)HTTP請(qǐng)求時(shí),asp.net mvc框架將使用它的URL路徑選擇引擎,把進(jìn)來的請(qǐng)求映射到一個(gè)控制器上的action方法來處理它。在基于MVC的應(yīng)用中的控制器負(fù)責(zé)處理進(jìn)來的請(qǐng)求,處理用戶輸入和交互,執(zhí)行基于這些輸入和交互的應(yīng)用邏輯(獲取或更新存儲(chǔ)在數(shù)據(jù)庫(kù)中的模型數(shù)據(jù)等等)。

到生成返回到客戶端的HTML回復(fù)的時(shí)候,控制器一般是與“視圖”組件合作,這些視圖組件是以獨(dú)立于控制器的單獨(dú)的類或模板的形式實(shí)現(xiàn)的,其目的是完全注重于封裝顯示邏輯。

控制器,模型和視圖組件 

視圖不應(yīng)該含有任何應(yīng)用邏輯或數(shù)據(jù)庫(kù)訪問代碼,所有的應(yīng)用/數(shù)據(jù)邏輯應(yīng)該由控制器類來處理。這么劃分的動(dòng)機(jī)是幫助強(qiáng)制你的應(yīng)用/數(shù)據(jù)邏輯與界面生成代碼間的清晰分離。同時(shí)這也方便你獨(dú)立于你的界面顯示邏輯來單元測(cè)試你的應(yīng)用/數(shù)據(jù)邏輯。

視圖應(yīng)該只使用從控制器傳過來的特定于視圖的數(shù)據(jù)來生成輸出。在asp.net mvc框架中,我們稱這個(gè)特定于視圖的數(shù)據(jù)為“ViewData”。這個(gè)博客的其他部分將討論你可以用來將ViewData從控制器傳遞給視圖來生成顯示的一些不同方法。

一個(gè)簡(jiǎn)單的產(chǎn)品列表場(chǎng)景

為幫助說明我們可以用來把ViewData從控制器傳遞給視圖的一些技術(shù),讓我們來建造一個(gè)簡(jiǎn)單的產(chǎn)品列表網(wǎng)頁(yè):

一個(gè)簡(jiǎn)單的產(chǎn)品列表網(wǎng)頁(yè) 

我們將用一個(gè)CategoryID整數(shù)來過濾我們想要顯示在頁(yè)面上的產(chǎn)品。注意上面我們是如何把CategoryID嵌在URL中的(例如,Products/Category/2 或 /Products/Category/4 )。

然后,我們的產(chǎn)品列表網(wǎng)頁(yè)顯示了2個(gè)不同的動(dòng)態(tài)內(nèi)容元素。第一個(gè)元素是我們要顯示的分類的文本名稱(例如,Condiments-調(diào)味品),第二個(gè)元素是一個(gè)HTML < ul>< li/>< /ul> 產(chǎn)品名字列表。我在上面的屏幕截圖中對(duì)這2個(gè)元素用紅筆畫了圈。

在下面,我們將看一下我們可以使用的2個(gè)不同的方法來實(shí)現(xiàn)ProductsController類,這個(gè)類處理進(jìn)來的請(qǐng)求,獲取處理請(qǐng)求所需的數(shù)據(jù),然后將這個(gè)數(shù)據(jù)傳給一個(gè)List視圖來顯示。我們要研究的第一個(gè)方法是用后期綁定的字典對(duì)象傳遞這個(gè)數(shù)據(jù),第二個(gè)方法則使用強(qiáng)類型類的方式來傳遞這個(gè)數(shù)據(jù)。

方法 1:使用 Controller.ViewData 字典來傳遞ViewData

Controller基類有個(gè)ViewData字典屬性,可以用來填充你要傳給視圖的數(shù)據(jù)。你使用鍵/值模式將對(duì)象加入 ViewData 字典。

下面是個(gè)ProductsController類,其中的Category action方法實(shí)現(xiàn)了我們上面的產(chǎn)品列表場(chǎng)景。注意,它是如何使用分類的ID參數(shù)來查詢?cè)摲诸惖奈谋久Q,以及獲取該分類中的產(chǎn)品列表的。它使用“CategoryName”和“Products”兩個(gè)鍵將這兩個(gè)數(shù)據(jù)存儲(chǔ)在Controller.ViewData 集合中:

它使用“CategoryName”和“Products”兩個(gè)鍵將這兩個(gè)數(shù)據(jù)存儲(chǔ)在Controller.ViewData 集合中 

然后,我們上面的Category action方法調(diào)用 RenderView("List") 來表示它要用哪個(gè)模板來做顯示。當(dāng)你象這樣調(diào)用RenderView時(shí),它會(huì)將ViewData字典傳給視圖,以顯示對(duì)應(yīng)的回復(fù)。

實(shí)現(xiàn)我們的視圖

我們將使用居于我們項(xiàng)目的\Views\Products目錄下的List.aspx文件來實(shí)現(xiàn)我們的List視圖。這個(gè) List.aspx 將繼承 \Views\Shared 文件夾中的Site.Master母版頁(yè)中的布局(在你創(chuàng)建一個(gè)新的視圖網(wǎng)頁(yè)時(shí),你可以在 VS 2008 中,右擊,選擇添加新項(xiàng)->MVC視圖內(nèi)容網(wǎng)頁(yè)來接連一個(gè)母版頁(yè)):

這個(gè) List.aspx 將繼承 \Views\Shared 文件夾中的Site.Master母版頁(yè)中的布局 

當(dāng)我們使用MVC視圖內(nèi)容網(wǎng)頁(yè)模板來創(chuàng)建List.aspx網(wǎng)頁(yè)時(shí),它不是從通常的 System.Web.UI.Page 類繼承而來,而是從System.Web.Mvc.ViewPage 基類繼承而來(是現(xiàn)有的Page類的一個(gè)子類):

當(dāng)我們使用MVC視圖內(nèi)容網(wǎng)頁(yè)模板來創(chuàng)建List.aspx網(wǎng)頁(yè)時(shí),它不是從通常的 System.Web.UI.Page 類繼承而來,而是從System.Web.Mvc.ViewPage 基類繼承而來 

ViewPage基類提供一個(gè)ViewData字典屬性,我們可以在視圖網(wǎng)頁(yè)里訪問由控制器添加的數(shù)據(jù)對(duì)象。然后我們可以取出這些數(shù)據(jù)對(duì)象,使用它們來顯示HTML輸出,可以用服務(wù)器控件的方式,或者用 < %= %> 顯示代碼的方式。

使用服務(wù)器控件來實(shí)現(xiàn)我們的視圖

下面是一個(gè)如何使用現(xiàn)有的< asp:literal> 和 < asp:repeater>服務(wù)器控件來實(shí)現(xiàn)我們的HTML界面的例子:

如何使用現(xiàn)有的< asp:literal> 和 < asp:repeater>服務(wù)器控件來實(shí)現(xiàn)我們的HTML界面 

我們可以用下面的后臺(tái)代碼類將 ViewData 綁定到這些控件之上(注意我們是如何使用ViewPage的ViewData字典來實(shí)現(xiàn)的 ):

用下面的后臺(tái)代碼類將 ViewData 綁定到這些控件之上 

注: 因?yàn)轫?yè)面上沒有 < form runat="server">,是不會(huì)輸出 view-state 的。上面的控件也不會(huì)自動(dòng)生成任何ID值,這意味著你對(duì)輸出的HTML有完全的控制。

使用 < %= %> 代碼來實(shí)現(xiàn)我們的視圖

如果你更喜歡使用行內(nèi)代碼來生成輸出的話,你可使用下面的 List.aspx 來實(shí)現(xiàn)跟上面完全一樣的結(jié)果:

用下面的 List.aspx 來實(shí)現(xiàn)跟上面完全一樣的結(jié)果 

注: 因?yàn)閂iewData的類型是含有“objects”的字典,為了對(duì)它使用foreach語(yǔ)句,我們需要將ViewData["Products"]的類型轉(zhuǎn)換成 List< Product> 或者 IEnumerable< Product>。我在頁(yè)面上引用了System.Collections.Generic 和 MyStore.Models 命名空間 以避免輸入 List< T> 和 Product 類型的完整名稱。

注: 上面使用了“var”關(guān)鍵詞,這是VS 2008中新的 C# 和 VB “類型推斷”特性的一個(gè)例子(在這里閱讀我以前的相關(guān)貼子)。因?yàn)槲覀儗iewData["Products"] 轉(zhuǎn)換成了 List< Product>,我們?cè)?List.aspx 文件中的 prduct 變量上得到了完整的intellisense:

我們?cè)?List.aspx 文件中的 prduct 變量上得到了完整的intellisense 

這樣就使用ASP.NET MVC框架實(shí)現(xiàn)了一個(gè)電子商務(wù)網(wǎng)站。

【編輯推薦】

  1. ASP.NET Session 模型簡(jiǎn)述
  2. ASP.NET頁(yè)生命周期介紹:階段,事件及其他
  3. ASP.NET MVC生命周期介紹
  4. 處理ASP.NET Session失效的幾個(gè)方法
  5. ASP.NET:所有實(shí)例共享一個(gè)static變量

責(zé)任編輯:book05 來源: hi.baidu
相關(guān)推薦

2011-03-02 09:00:10

ASP.NET MVC

2009-07-28 13:21:27

2009-07-28 13:47:47

ASP.NET電子商務(wù)ASP.NET購(gòu)物車

2009-07-28 13:06:19

ASP.NET電子商務(wù)

2009-07-24 13:20:44

MVC框架ASP.NET

2010-09-03 09:33:53

2009-04-16 11:14:49

Linux阿里巴巴電子商務(wù)

2009-07-22 10:09:59

ASP.NET MVC

2009-07-22 13:24:24

ASP.NET MVC

2009-07-20 10:53:59

ASP.NET MVC

2009-08-14 14:05:52

購(gòu)物環(huán)境釣魚網(wǎng)站SSL

2012-01-16 12:09:21

2016-04-28 09:47:31

2009-07-22 10:34:37

ActionInvokASP.NET MVC

2009-07-22 13:08:55

拯救UpdatePanASP.NET MVC

2010-06-23 15:44:03

ASP.NET MVC

2011-07-25 16:09:29

2009-07-23 15:44:39

ASP.NET MVC

2009-07-01 18:30:51

JSP開發(fā)電子商務(wù)網(wǎng)站

2011-12-07 09:35:14

電子商務(wù)網(wǎng)宿科技
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)