2019/0603/Bootstrap Components RWD End + ASP.NET_MVC Part2 PhotoSharing CodeFirst & Model 驗證
#bootstrap components
##Modal 互動視窗
利用一個盒子把物件隱藏在藉由BUTTON或…觸發顯示
利用DATA-
Fade 淡入淡出
一開始直接顯示modal 所以要用jq show

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

##NavBar 導覽列
非常多階層要特別注意
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?