成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用ASP.NET MVC框架創建電子商務網站

開發 后端
此篇通過創建一個電子商務網站,討論ASP.NET MVC框架下控制器是如何與視圖做交互的。

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

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

第一部分的扼要簡述

在這個系列的第一部分,我們創建了一個電子商務網站,實現了基本的產品列表/瀏覽支持。我們是用asp.net mvc框架實現這個網站的,這個方法會很自然地將代碼結構化為獨特的控制器,模型和視圖組件。

當瀏覽器向我們的網站發送一個HTTP請求時,asp.net mvc框架將使用它的URL路徑選擇引擎,把進來的請求映射到一個控制器上的action方法來處理它。在基于MVC的應用中的控制器負責處理進來的請求,處理用戶輸入和交互,執行基于這些輸入和交互的應用邏輯(獲取或更新存儲在數據庫中的模型數據等等)。

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

控制器,模型和視圖組件 

視圖不應該含有任何應用邏輯或數據庫訪問代碼,所有的應用/數據邏輯應該由控制器類來處理。這么劃分的動機是幫助強制你的應用/數據邏輯與界面生成代碼間的清晰分離。同時這也方便你獨立于你的界面顯示邏輯來單元測試你的應用/數據邏輯。

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

一個簡單的產品列表場景

為幫助說明我們可以用來把ViewData從控制器傳遞給視圖的一些技術,讓我們來建造一個簡單的產品列表網頁:

一個簡單的產品列表網頁 

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

然后,我們的產品列表網頁顯示了2個不同的動態內容元素。第一個元素是我們要顯示的分類的文本名稱(例如,Condiments-調味品),第二個元素是一個HTML < ul>< li/>< /ul> 產品名字列表。我在上面的屏幕截圖中對這2個元素用紅筆畫了圈。

在下面,我們將看一下我們可以使用的2個不同的方法來實現ProductsController類,這個類處理進來的請求,獲取處理請求所需的數據,然后將這個數據傳給一個List視圖來顯示。我們要研究的第一個方法是用后期綁定的字典對象傳遞這個數據,第二個方法則使用強類型類的方式來傳遞這個數據。

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

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

下面是個ProductsController類,其中的Category action方法實現了我們上面的產品列表場景。注意,它是如何使用分類的ID參數來查詢該分類的文本名稱,以及獲取該分類中的產品列表的。它使用“CategoryName”和“Products”兩個鍵將這兩個數據存儲在Controller.ViewData 集合中:

它使用“CategoryName”和“Products”兩個鍵將這兩個數據存儲在Controller.ViewData 集合中 

然后,我們上面的Category action方法調用 RenderView("List") 來表示它要用哪個模板來做顯示。當你象這樣調用RenderView時,它會將ViewData字典傳給視圖,以顯示對應的回復。

實現我們的視圖

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

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

當我們使用MVC視圖內容網頁模板來創建List.aspx網頁時,它不是從通常的 System.Web.UI.Page 類繼承而來,而是從System.Web.Mvc.ViewPage 基類繼承而來(是現有的Page類的一個子類):

當我們使用MVC視圖內容網頁模板來創建List.aspx網頁時,它不是從通常的 System.Web.UI.Page 類繼承而來,而是從System.Web.Mvc.ViewPage 基類繼承而來 

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

使用服務器控件來實現我們的視圖

下面是一個如何使用現有的< asp:literal> 和 < asp:repeater>服務器控件來實現我們的HTML界面的例子:

如何使用現有的< asp:literal> 和 < asp:repeater>服務器控件來實現我們的HTML界面 

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

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

注: 因為頁面上沒有 < form runat="server">,是不會輸出 view-state 的。上面的控件也不會自動生成任何ID值,這意味著你對輸出的HTML有完全的控制。

使用 < %= %> 代碼來實現我們的視圖

如果你更喜歡使用行內代碼來生成輸出的話,你可使用下面的 List.aspx 來實現跟上面完全一樣的結果:

用下面的 List.aspx 來實現跟上面完全一樣的結果 

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

注: 上面使用了“var”關鍵詞,這是VS 2008中新的 C# 和 VB “類型推斷”特性的一個例子(在這里閱讀我以前的相關貼子)。因為我們將ViewData["Products"] 轉換成了 List< Product>,我們在 List.aspx 文件中的 prduct 變量上得到了完整的intellisense:

我們在 List.aspx 文件中的 prduct 變量上得到了完整的intellisense 

這樣就使用ASP.NET MVC框架實現了一個電子商務網站。

【編輯推薦】

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

責任編輯:book05 來源: hi.baidu
相關推薦

2011-03-02 09:00:10

ASP.NET MVC

2009-07-28 13:21:27

2009-07-28 13:47:47

ASP.NET電子商務ASP.NET購物車

2009-07-28 13:06:19

ASP.NET電子商務

2009-07-24 13:20:44

MVC框架ASP.NET

2010-09-03 09:33:53

2009-07-22 13:24:24

ASP.NET MVC

2009-07-22 10:09:59

ASP.NET MVC

2009-07-20 10:53:59

ASP.NET MVC

2009-04-16 11:14:49

Linux阿里巴巴電子商務

2009-08-14 14:05:52

購物環境釣魚網站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

2009-07-23 15:44:39

ASP.NET MVC

2010-06-23 15:44:03

ASP.NET MVC

2011-12-07 09:35:14

電子商務網宿科技

2009-07-01 18:30:51

JSP開發電子商務網站

2011-07-25 16:09:29

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久久尿 | 欧美jizzhd精品欧美巨大免费 | 中文一区 | 99亚洲精品 | 日韩黄色免费 | 国产成人一区二 | 亚洲成年人免费网站 | 久久日韩精品 | 亚洲三区在线观看 | 午夜三区 | 91精品久久久久久久久久入口 | 91操操操 | av在线成人 | 精品久久久久久久人人人人传媒 | 国产一二区免费视频 | 成人国产精品免费观看 | 日本在线视频中文字幕 | 国产无套一区二区三区久久 | 日本一区二区不卡 | 国内av在线 | 男女国产视频 | 欧美午夜精品久久久久免费视 | 午夜影视在线观看 | 久久美女网 | 成人午夜精品一区二区三区 | 欧美精品一区二区在线观看 | 亚洲码欧美码一区二区三区 | 欧美黄色网 | 久久久妇女国产精品影视 | 亚洲精品无 | 国产一区不卡 | 天天摸天天干 | 精品久久久久久久久久久院品网 | 激情五月婷婷 | 91亚洲一区| 午夜噜噜噜 | 精品亚洲一区二区三区 | 91精品国产乱码麻豆白嫩 | 中文字幕国产视频 | 国产在线视频一区二区董小宛性色 | 91爱啪啪 |