2019/0603/Bootstrap Components RWD End + ASP.NET_MVC Part2 PhotoSharing CodeFirst & Model 驗證

#bootstrap components

利用一個盒子把物件隱藏在藉由BUTTON或…觸發顯示

利用DATA-

Fade 淡入淡出

一開始直接顯示modal 所以要用jq show

###ftp://web@10.10.3.189/RWD/36Model.html

非常多階層要特別注意

Navbar 不等於 nav

所以有個class是 navbar-nav

html5 nav

collapse -> navbar-collaps 摺疊

接著做漢堡選單按鈕 去把折疊的東西叫出來收回去

navbar-toggler-icon

### ftp://web@10.10.3.189/RWD/37NavBar.html

處理響應式斷點 md改為下拉式選單 sm才是漢堡選單

三版的顏色或大小要去改核心

但四版的有屬性可以扛拜

### ftp://web@10.10.3.189/RWD/37NavBar.html

##38Collapse.html 摺疊

md暫時折疊 sm顯示之類或者

### ftp://web@10.10.3.189/RWD/38Collapse.html

Collapse 如果要預設要show 只要扛拜show即可

以下範例為 三個 但預設顯示第一個 案二或三才切換

###手風琴導覽

### ftp://web@10.10.3.189/RWD/39Collapse2.html

##最後所有功能實作在頁面上

### ftp://web@10.10.3.189/RWD/40Collapse.html

#MVC Part2 強度很強 從頭講到尾 全部接續下去 都是同一個主題

帶照片 討論區 可以留言

示範用範本

因為有載入範本連layout都會做出來 bootstrap也會裝上去

##01_Code first

class -> model -> DB

##靜態類別圖(永存資料) 以前只有建立過動態類別

UML?

Student .

+SID

+SName

+等於public

以往都會先導入資料庫

現在則是直接編譯model

所以也要先設計一下資料庫的關聯

主留言板 table 1 對 多 留言回復table

Webform是用泛型處理常式存photo檔案(二進位資料)byte[]陣列

等等會講那怎用controller處理

##接著很重要 model寫關聯

實作的資料庫只有一對多,沒有多對多

Virtual 虛擬 只要繼承這個類別 都可以 override ???

商業邏輯寫在model就可以在編輯controller與view時輕鬆很多

##接著要寫驗證在model裡面

要先using System.ComponentModel

與 using System.ComponentModel.DataAnnotations

只要 寫 XXXID 就會自動變 PK

但是如果要指定呢?

[Key] 只要在上面加上這個即可

[Required] 必填直接加上這個即可

[HiddenInput] 用於讀取不是要填寫的就做隱藏欄位 ( 要using System.Web.Mvc

[DataType(DataType.Date)] 驗證時間是否為當時時間,用於顯示時間但不給編輯

[DisplayFormat(DataFormatString=”{0:yyyy/MM/dd}”)],ApplyFormatInEditMode=true)

格式要求且編輯時直接套用

[DataType(DataType.MultilineText),StringLength(400)] 多行文字方塊最多400字

[MaxLength] 二進位資料最大值

定義越豐富前面可以寫更少

[DisplayName] 顯示字

##自訂驗證器

直接做一個public class名稱字定,但是要繼承於 ValidationAttribute

建構子

Override 覆蓋它原本的方法IsValid

驗證通過傳true否則false

?true:false

###ftp://mvc@10.10.3.189/PhotoSharing/PhotoSharing/Models/Photo.cs

###ftp://mvc@10.10.3.189/PhotoSharing/PhotoSharing/Models/Comment.cs

###老師步驟

##透過程式碼建mdf 順帶新增一些值進去

要透過data物件建立,要自己寫

( 通常不會放在同一個目錄所以在建立另外一個資料夾 ( 資料存取層

###1.Context上下文

加入空類別PhotoSharingContext 繼承 dbcontext

且要安裝套件EntityFramework

以前不用裝是因為DBFirst,ADO就先裝了

等等會直接建立在ssms裡面.mdb檔案

讀存方式

建構子 ( 資料庫名稱 Base

###2.Initializer初始化

PhotoSharingInitializer ( using 需要用的 Entity 與 models

只要每次開起這個專案會把原先資料庫殺掉在做一個新的

Dropcreatedatabasealways 通常

Dropcreatedatabaseifmodel 模型沒異動就不會異動

Override seed方法

List泛型 編輯資料

接著

儲存到模型

在儲存到資料庫

然後在外層寫個funtion用於把照片檔案傳入然後轉為byte[]

首先參數為路徑

FileStream 要using system.io

New一個物件

Httpruntime.appdomainapppath 網址 + path

Filemode.open

接著把抓到的東西 丟到byte[]

容易發生例外所以放在using裡面

Binarareader 專門在讀二進位資料

回傳會是一筆二進位資料

接著一樣做幾筆 回復資料

###PhotoSharing/PhotoSharing/DAL/PhotoSharingContext.cs

### PhotoSharing/PhotoSharing/DAL/PhotoSharingInitializer.cs

接著在Global.asax.cs using Entity 與 剛剛做的 DAL

然後//Database.SetInitializer<PhotoSharingContext>(new PhotoSharingInitializer());

數據基礎。組初始化照片分享上下文新照片分享初始化

此行只要沒註解每次跑一次 global.asax.cs時就會在重新產生一次mdf

### ftp://mvc@10.10.3.189/PhotoSharing/PhotoSharing/Global.asax.cs

###老師步驟

有可能會因為權限而報錯

沒報錯 所以接著建置controller 且用範本 一同建置view的版本

全勾且model用photo

CRUD+Details的View都會做好

預覽的時候才會去跑Global所以這時才會建置,而不是剛剛建置controller

因為剛剛沒有去寫說mdf要建置在哪所以會自動產生在appdata裡面

###接著看範本產生的 View

CRUDDetail的GET 與 POST

講解了一下剛剛的原理

接著第二步驟 我們不用剛剛自動產生的controller 我們自己從空的寫

02_Controller.cs

將舊的Controller改名就可以重寫

新增檢視直接蓋過舊的 model class用 photo

Data context class photosharingcontext

直接覆蓋

接著講解一些以前View觀念

建立View明明Controller裡面只有一個Action

為什麼會有Details 或 Create 或 Delete 呢?

因為我們的View是用範本去改的這是範本裡面的內容

記住 action name 是互相對應的

接著回到controller

介紹 ViewData[“DataName”] =

類似Session ( 但型態不是萬用的必須轉型?

System.Net.HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest)

返回錯誤訊息物件

型態? 讓型態是可以傳遞null值

Find 也可以用 where

BadRequest 為錯誤400 ( 少參數

HttpNotFound 為錯誤 404 ( 找不到目標

接著反傳找到的 照片 ( display 其實就是 detail function

接著先處理照片 二進位轉為照片檔案

Controller 裡面寫 function 轉

FileContentResult

先找 id 然後

然後 用 File方法轉換二進位值 + 副檔名

太大 用三版bs responsive 可以把照片修正到正常大小

Viewdata 具有型態 要顯示必須要轉型 (DateTime)寫在前面就強制轉型!

後面會用詳細例子講生命週期

###02_Controller/PhotoSharing/Views/Photos/Index.cshtml

###02_Controller/PhotoSharing/Views/Photos/Display.cshtml

###02_Controller/PhotoSharing/Controllers/PhotosController.cs

###老師步驟

待續

Last updated

Was this helpful?