2019/0528/Bootstrap Components 元件介紹 + MVC 登入驗證 + 商品加入購物車 實作

Bootstrap Components

Bootstrap dropdown上次套件庫bug

Keyword Disable Active

不止擺選單,只要不是超鏈結

button與dropdown合併做法

###\WebApplication\responsive_web_design\RWD\24Dropdown.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title></title>
    <link href="Content/bootstrap.min.css" rel="stylesheet" />
    <link href="MyStyle.css" rel="stylesheet" />
</head>
<body>
    <div class="container">
        <!--基本型-->
        <div class="dropdown">
            <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown" id="ddMenu1">
                Menu

            </button>
            <div class="dropdown-menu" aria-labelledby="ddMenu1">
                <a href="#" class="dropdown-item">Action</a>
                <a href="#" class="dropdown-item disabled">Another action</a>
                <a href="#" class="dropdown-item">Something else here</a>
                <a href="#" class="dropdown-item active">Separated link</a>
                <div class="dropdown-divider"></div>
                <a href="#" class="dropdown-item">Action</a>
                <a href="#" class="dropdown-item">Another action</a>

            </div>
        </div>
        <hr />
        <!--群組按鈕-->
        <div class="btn-group">
            <button class="btn btn-danger" data-toggle="dropdown" id="ddMenu2">
                Menu
            </button>
            <button class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" id="ddMenu2"></button>
            <div class="dropdown-menu" aria-labelledby="ddMenu2">
                <a href="#" class="dropdown-item">Action</a>
                <a href="#" class="dropdown-item">Another action</a>
                <a href="#" class="dropdown-item">Something else here</a>
                <a href="#" class="dropdown-item">Separated link</a>
                <div class="dropdown-divider"></div>
                <a href="#" class="dropdown-item">Action</a>
                <a href="#" class="dropdown-item">Another action</a>

            </div>
        </div>


        <hr />
        <br />
        <br /><br /><br /><br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <!--選單往上出現-->
        <div class="btn-group dropup">
            <button class="btn btn-danger" data-toggle="dropdown" id="ddMenu3">
                Menu
            </button>
            <button class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" id="ddMenu3" aria-haspopup="true"></button>
            <div class="dropdown-menu" aria-labelledby="ddMenu3">
                <a href="#" class="dropdown-item">Action</a>
                <a href="#" class="dropdown-item">Another action</a>
                <a href="#" class="dropdown-item">Something else here</a>
                <a href="#" class="dropdown-item">Separated link</a>
                <div class="dropdown-divider"></div>
                <a href="#" class="dropdown-item">Action</a>
                <a href="#" class="dropdown-item">Another action</a>

            </div>
        </div>
        <hr />
        <!--選單往左側出現-->
        <div class="btn-group dropleft">
            <button class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" id="ddMenu4"></button>
            <button class="btn btn-danger" data-toggle="dropdown" id="ddMenu4">
                Menu
            </button>

            <div class="dropdown-menu" aria-labelledby="ddMenu4">
                <a href="#" class="dropdown-item">Action</a>
                <a href="#" class="dropdown-item">Another action</a>
                <a href="#" class="dropdown-item">Something else here</a>
                <a href="#" class="dropdown-item">Separated link</a>
                <div class="dropdown-divider"></div>
                <a href="#" class="dropdown-item">Action</a>
                <a href="#" class="dropdown-item">Another action</a>

            </div>
        </div>
        <hr />
        <!--Responsive選單的對齊-->
        <div class="dropdown" style="border:1px solid">
            <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown" data-display="static">
                如果大螢幕的時候選單往右靠,一般大小螢幕時用預設方式對齊

            </button>
            <div class="dropdown-menu dropdown-menu-lg-right">
                <a href="#" class="dropdown-item">Action</a>
                <a href="#" class="dropdown-item disabled">Another action</a>
                <a href="#" class="dropdown-item">Something else here</a>
                <a href="#" class="dropdown-item active">Separated link</a>
                <div class="dropdown-divider"></div>
                <a href="#" class="dropdown-item">Action</a>
                <a href="#" class="dropdown-item">Another action</a>

            </div>
        </div>

        <hr />
        <!--純文字-->
        <div class="dropdown">
            <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
                Text

            </button>
            <div class="dropdown-menu p-4 text-danger" style="max-width:250px">
                <p>
                    asdfdasfdasfasdfdasfdas
                </p>
                <p class="mb-0">
                    444444444
                </p>
            </div>
        </div>

        <hr />

        <!--與Form合併使用-->
        <div class="dropdown">
            <button class="btn btn-primary" data-toggle="dropdown">
                登入系統

            </button>
            <div class="dropdown-menu">
                <form class="px-4 py-3">
                    <div class="form-group">
                        <label for="email">Email:</label>
                        <input id="email" type="email" class="form-control" placeholder="Enter email..." required />
                    </div>
                    <div class="form-group">
                        <label for="pwd">Password:</label>
                        <input id="pwd" type="password" class="form-control" placeholder="Password" required />
                    </div>
                    <div class="form-group form-check">
                        <input id="remember" type="checkbox" class="form-check-input" />
                        <label for="remember">記住我</label>
                    </div>
                    <input id="Submit1" type="submit" value="Sign in" class="btn btn-secondary" />
                </form>
                <div class="dropdown-divider"></div>
                <a href="#" class="dropdown-item">註冊會員</a>
                <a href="#" class="dropdown-item">忘記密碼</a>
            </div>
        </div>
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />  <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />


        <hr />
        <!--與Button合併使用-->
        <div class="btn-group">
            <button type="button" class="btn btn-info">Item 1</button>
            <button type="button" class="btn btn-info">Item 2</button>
            <div class="btn-group">
                <button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown">Item 3</button>
                <div class="dropdown-menu">
                    <a href="#" class="dropdown-item">Action</a>
                    <a href="#" class="dropdown-item">Another action</a>
                    <a href="#" class="dropdown-item">Something else here</a>
                    <a href="#" class="dropdown-item">Separated link</a>
                    <div class="dropdown-divider"></div>
                    <a href="#" class="dropdown-item">Action</a>
                    <a href="#" class="dropdown-item">Another action</a>

                </div>
            </div>
            <button type="button" class="btn btn-info">Item 4</button>
        </div>

        <br />
        <br />
        <br />
        <br />
        <br />
        <br />  <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />
        <br />

    </div>


    <script src="Scripts/jquery-3.0.0.min.js"></script>
    <script src="Scripts/bootstrap.bundle.min.js"></script>
    <!--<script src="Scripts/popper.js"></script>-->
    <!--<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
    <script src="Scripts/bootstrap.min.js"></script>-->


    <!--<script src="Scripts/bootstrap.bundle.min.js"></script>-->
    <!--<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>-->
    <!--<script src="Scripts/popper.js"></script>-->
    <!--<script src="Scripts/bootstrap.min.js"></script>-->




</body>
</html>

導覽

Keyword

Nav

Nav-item

Nav-tabs

Nav-pills

Flex

justify

應用jq

data-toggle

###:\Little-donkey\WebApplication\responsive_web_design\RWD\25Navs.html

#pagination 分頁 樣式

Html5 nav 導覽列 SEO 語意化

調一般的置中 輔助類別 ( justify-content-center …

### \WebApplication\responsive_web_design\RWD\26Pagination.html

#題外話 分頁功能

MVC 分頁較麻煩像是進階的購物車 ( 1.JQ 2.NUGET套件

Webform分頁簡單 ( 因為狀態會保留住

#27GridView_Pagination.aspx

示範 webform與gridview套bootstrap 用cssdom 與 jqdom 塞 class屬性

###\WebApplication\responsive_web_design\RWD\27GridView_Pagination.aspx

#28Progress.html 進度欄 ( 樣式

Keyword

Progress-bar

Progress-bar-striped

progress-bar-animated

但長度就要利用css style 表達

很多keyword … 很多樣式動畫

###WebApplication\responsive_web_design\RWD\ 28Progress.html

#spinner 讀取中樣式

還在執行 旋轉的樣式 ( 功能都必須寫javascript

Ajax json requses and reghsad time

Keyword

spinner-border

text-danger/warning

spinner-grow

### WebApplication\responsive_web_design\RWD\29Spinner.html

#MVC會員登入 加入購物車功能

( 單元劇結束 下一次會講一整個MVC專案 ( 留言板 IG

(資料庫端應用程式端其實都可以寫

ViewModel要去再看一下功能定義

4張表就是4個class

顯示using System.ComponentModel; 驗證using System.ComponentModel.DataAnnotations;

###tOrderDetail.cs

大部分組別 購物車table

但其實可以訂單明細就是購物車只要一個欄位去做判別 是訂單還是購物車

(但大部分都是用在登入後

沒有要做商品管理(上下架(所以不驗證商品表單

整理model

### 08ShoppingCar/Models/tMember.cs

接著寫控制器Controller

Using 剛剛做好的model

New一個資料庫物件出來

接著把tProduct表放進變數products

資料庫的資料先讀到index去

但沒有那麼簡單

必須要有登入與非登入的layout 用來存session

##今天要做第二個layout

首先先新增視圖Empty(without model)

但首先處理Index.cshtml ( 商品清單

@model IEnumerable 泛型

手刻bootstrap版

手刻 加入購物車的按鈕

先寫死的一次

再用foreach item 做所有的資料筆數

加入購物車的按鈕傳入當筆id藉由url傳遞到 action

接著必須判斷session才會出現 加入購物車的按鈕

接著回到Controller寫利用session判斷index的_layout

### 08ShoppingCar/Controllers/HomeController.cs

###08ShoppingCar/Views/Home/Index.cshtml

###老師步驟

接著來改layout 改自動產生的碼

還有要改漢堡選單

一樣用helper html.actionlink

三版bootstrap用法

然後突然教了轉google搜尋引擎

接著在Shared新增一個新的layout

兩種view大家都可以用它? 一種是Layout

pasharedview ?? 下一個專案會告訴大家

接著做登入過後的 layout

漢堡選單內改為 登入過後的功能

然後稍微改了些bootstrap

### 08ShoppingCar/Views/Shared/_LayoutMember.cshtml

接著弄兩個action做登入一個用來post驗證一個用來get回傳值?

用simple bind就好因為只有帳號密碼

用linq lmada 寫查詢 查到就塞到變數 如果沒查到就不會塞

用viewbag傳帳號或密碼錯誤訊息到前端

如果驗證成功則 session帶入資料

且return redirecttoaction index

接著做登入的頁面 Login.cshtml

這裡有示範bind 但不知道是簡單還複雜

&錯誤訊息產生的方式

到此登入驗證帶session功能完成

###08ShoppingCar/Controllers/HomeController.cs

###08ShoppingCar/Views/Home/Login.cshtml

###老師步驟

接著寫登出功能

清空session

寫在homecontroller.cs

ActionResult logout

會員登入 -> 進入index -> 資料庫資料

到此整個流程就串起來

接著做註冊帳號密碼

這裡多載用的是複雜繫結

首先先判斷驗證是否通過(modelstate.isvalid)

必須要用linq寫驗證是否重複

沒重複就寫入複雜繫結的物件

如果有重複則回傳錯誤訊息

接著新增註冊view

用帶model範本的view比較簡單因為用的是複雜繫結

砍掉一些不用的改掉一些要改得即可

###註冊帳號完成

###08ShoppingCar/Views/Home/Register.cshtml

###08ShoppingCar/Controllers/HomeController.cs

###老師步驟

###剩下兩個主功能還沒完成 購物車crud 和訂單crud

禮拜五早上會講listView

包含 列出 加入 刪除 購物車內容

tOrderDetail

#購物車頁面 列出商品get 方法

只要仿照剛剛的index action 即可 ( index 裡面為商品清單

必須要傳入meber參數 因為只能看到自己的購物車

所以要用linq下查詢指傳回特定值

但因為剛剛Member是整個集合用複雜繫結所以要做預處理

接著把購物車資料丟入ShoppingCar()的View

然後要記得指定登入狀態的layout

空範本但

Model 用 tOrderDetail

增加view因為剛剛已經指定了所以layout不用再指定一次

接著到ShoppingCar.cshtml編輯view

一樣改範本必須要修改的

然後實作delete功能 ( url 傳遞

Ferter功能 ( 下個專案會講 ( 沒登入時報錯???

##接著實作加入購物車功能

新增一個 addcar把商品id傳入

然後用session抓會員帳號

邏輯是 按一次加入購物車 商品數量就會再加1 如我沒在購物車 放入預設為1

用linq去查詢看有沒有重複如果沒有這筆商品則

把產品id 會員id 數量 價格 商品名稱 狀態 丟入 model

如果已經被加入購物車則

則購物車內的商品+1

Db.SaveChanges()

Return shooppingcar

購物車完成2/3

出現bug 找很久 session其實要寫在ferter???會更好

接著寫 刪除 ( 獨立出一個 action 搜尋的是 fid所以要傳fid近來

把要刪掉的那筆找出來

然後從模型內先刪掉

真正update到資料庫

然後再return 到 shoppingcar 這樣 購物車功能即完成

把之前的crud加到商品 就變成商品管理 但是可能就要第三個layout

###08ShoppingCar/Controllers/HomeController.cs

###08ShoppingCar/Views/Home/ShoppingCar.cshtml

###老師步驟

購物車完成但是訂單系統還沒 留到下一次

Last updated

Was this helpful?