天天看點

ASP.NET MVC 音樂商店 - 9. 注冊和結賬

在這一節,我們将建立結賬的控制器 CheckoutController

來收集使用者的位址和付款資訊,我們需要使用者在結賬前注冊賬戶,因為這個控制器需要授權。

當使用者點選結賬 Checkout 按鈕的時候,使用者将會被導航到結賬的處理流程中。

ASP.NET MVC 音樂商店 - 9. 注冊和結賬

如果使用者沒有登入,将會被提示需要登入。

ASP.NET MVC 音樂商店 - 9. 注冊和結賬

一旦使用者成功登陸,使用者就可以看到位址和付款的視圖。

ASP.NET MVC 音樂商店 - 9. 注冊和結賬

一旦使用者填寫了這個表單并送出,他們将會看到訂單的确認頁面。

ASP.NET MVC 音樂商店 - 9. 注冊和結賬

視圖通路不存在的訂單,或者不屬于你的訂單,将會看到錯誤頁面。

ASP.NET MVC 音樂商店 - 9. 注冊和結賬

在匿名購物的時候,當使用者點選結賬 Checkout

按鈕,使用者會被要求注冊和登陸,使用者會希望繼續使用原來的購物車,是以,在匿名使用者登入之後,我們需要維護購物車。

實際上非常簡單,因為 ShoppingCart

類已經提供了一個方法,通過目前的使用者名來擷取購物車中所有的項目,在使用者注冊登入以後,我們隻需要調用這個方法。

打開在成員管理和授權中添加的 AccountController 類,增加一個 using 來引用 MvcMusicStore.Models,然後,增加

MigrateShoppingCart 方法。

然後,修改 LonOn 的 Post 處理方法,在使用者通過驗證之後,調用 MigrateShoppingCart  方法。

在 Register 的 Post 處理方法中,一旦使用者成功建立帳戶,也進行類似的修改,

就這樣,現在匿名使用者登入之後,購物車将會被自動傳送過來。

在 Controller 檔案夾上右鍵,添加一個新的控制器,命名為 CheckoutController ,使用空的控制器模闆。

ASP.NET MVC 音樂商店 - 9. 注冊和結賬

首先,在控制器上增加授權的标注 [Authorize],來确定使用者必須在登入之後才能通路。

注意:這一步很像我們前面在 StoreManager 控制器上的工作,但是,在那個時候,我們要求使用者必須擁有 Administrator

的角色。在結賬控制器中,我們不需要使用者必須是 Administrator ,而是必須登入。

出于簡化的考慮,在這個教程中沒有處理付款的資訊,作為替代,我們允許使用者輸入一個促銷代碼,這裡促銷代碼定義在常量 PromoCode。

像在 StoreController 中一樣,在控制器中,我們也需要定義 MusicStoreEntities 的字段,将它命名為

storeDB,結賬的開始部分如下。

結賬的控制器将包含下面的控制器方法:

AddressAndPayment ( Get ) 用來顯示一個使用者輸入資訊的表單

AddressAndPayment ( Post ) 驗證使用者的輸入,處理訂單。

Complete 用來在在使用者完成訂單之後顯示,這個視圖包含使用者的訂單賬号和确認資訊。

首先,将 Index 方法改名為 AddressAndPayment, 這個 Action 方法用來顯示結賬表單,是以,不需要任何的模型資訊。

AddressAndPayment 的 Post 處理方法使用我們在 StoreManagerController

中類似的模式:如果成功了就完成訂單,如果失敗了就重新顯示表單。

在驗證了表單之後,我們将會直接檢查促銷代碼,假設所有的資訊都是正确的,我們将會在訂單中儲存資訊,告訴購物車對象完成訂單處理,最後,重定向到完成的

Complete Action 方法。

一旦完成了結賬處理,使用者将被重定向到 Complete 方法, 這個 Action

方法将會進行簡單的檢查,在顯示訂單号之前,檢查訂單是否屬于目前登入的使用者。

注意,錯誤視圖建立項目的時候,儲存在  /Views/Shared 檔案夾中的 error.cshtml 生成。

完整的 CheckoutController 如下所示.

現在,我們建立 AddressAndPayment 視圖,在 AddressAndPayment 控制器的某個 Action 中點選滑鼠的右鍵,增加名為

AddressAndPayment 的強類型 Order 視圖,使用編輯模闆。

ASP.NET MVC 音樂商店 - 9. 注冊和結賬

這個視圖使用我們在 StoreManager 的 Edit 視圖中使用的兩個技術:

1.使用 Html.EditorForModel() 來顯示訂單模型的字段

2.使用 Order 模型的驗證标簽定義驗證規則

我們先使用 Html.EditorForModel() 方法,然後,增加額外的輸入框用來輸入促銷碼,完成的視圖如下。

現在,我們的視圖已經建立了,類似于專輯,我們定義訂單的驗證規則。在 Models 檔案夾上點選滑鼠的右鍵,增加名為 Order

的模型類,我們使用專輯中使用過的驗證标注,我們還将使用正規表達式來驗證使用者的電子郵件位址。

在沒有送出必要的資訊或者送出錯誤資訊的時候,我們将會看到用戶端的驗證資訊。

ASP.NET MVC 音樂商店 - 9. 注冊和結賬

現在,我們已經完成了結賬中最困難的部分,還有一些小的工作要完成。我們增加兩個簡單的視圖,還需要注意在登入過程中購物車資訊。

完成結賬的視圖非常簡單,僅僅需要顯示訂單的編号,在控制器中的 Complete 方法上點選右鍵,增加名為 Complete 的強類型 int

視圖。

ASP.NET MVC 音樂商店 - 9. 注冊和結賬

現在,修改視圖顯示訂單的編号。

項目的預設模闆中,包含了定義在 /Shared Views

檔案夾中的錯誤頁面,可以在整個站點中使用。這個頁面僅僅包含簡單的資訊,也沒有使用我們的布局,我們更新一下。

由于這是通用的錯誤頁面,内容非常簡單,我們僅僅包含一個提示資訊,和用來重做工作的導航到上一個頁面的連結。

繼續閱讀