2019/0508/Asp.Net_MVC_Model_ADO.NET+Entityframework+LoginMember實作+MVC觀念

#ASP.NET_MVC_Model_ADOnet

首先開個空的mvc專案

然後老師有準備個db demo

然後開始先寫controllers

把ADO會用到的套件using進去

連線資訊放在 組態webconfig 是一種保密方式

更好的方式要在作業系統帳號密碼

或是帳號密碼放在AD統一管理

所以要去webconfig改資料庫存取路徑

|DataDirectory|是相對路徑會自動去app_data找資料庫

Intrgrated Security 是否要帳號密碼

相對於資料庫內的帳號密碼會顯示

這邊只有使用者會知道帳號密碼,因為存在作業系統

接著建造資料庫物件

建造在action外側

因為要讓所有action都能用

接著到index actionresult

去撈資料放入dataset物件 (

再放進去datatable物件 ( 資料表

Return view這個 datatable

接著去編輯view讓這個資料能夠顯示

因為是空的view而且也沒套用model模板

所以最上面要人工抓model

然後簡單html排版

利用@razor迴圈抓取資料並顯示

簡單套bootstrap table 瞬間排版 …

如果ftp抓資料下不來可能是在使用就會產生log檔

以下是老師版本步驟 老師有兩個版本的步驟不知道為啥

不一定所有的系統都具備新增刪除修改

有寫才有

所以我們先寫一個create action

這個是控制create html view頁面使用

在建立一個 create ( 參數 多載

用於將資料存入資料庫

首先將sql語言 寫 insert 放入字串中

在控制資料庫物件做方法(靜態函式?

Cmd.Parameters.AddWithValue

此方法需要給參數與參數來源

記得存入時要打開資料庫存完要關閉資料庫

做完後將資料 傳到 index action

接著做 delete

只要改寫create即可

然後回頭看有很多重複的code

所以…高內聚力低偶合力

建立一般方法

調整架構 把一些重複使用的放在這

以下為調整完後的code

方法為 先直覺寫在 調整會比較好思考

### /03Model_ADOnet/Controllers/HomeController.cs

###以下為老師步驟

沒有model是把資料庫擺在 app data 裡面

藉由 webing 去調用 增加資安性與物件導向重複利用性

接著編輯 creat.cshtml

這邊會示範bs3如何做表單form

首先要設定傳送方式與動作(url請求傳送的封包內容

<form method="post" action="@Url.Action("Create")">

表單到這邊就結束了 以下示範bs3排版

###一樣的重點

Id給前端用的

name給後端用的記得要簡單繫結與後端參數相同名稱

Type給input用的html5

Class給bs用的

這裡應用到 label for 這個??

可以讓區域點選 這方面可能還要看一下

喔喔原來是 htmltag自帶的功能for對應的是id

###Bs網格系統要空格要用 offset後面在接空幾格

接著最後用@razor做連結將顯示頁面與新增頁面鏈結

回到index

做刪除的@razor 這邊跟上面類似但比較麻煩是

Helper裡面傳的參數比較複雜不是傳頁面

而是用razor寫的要帶在url裡面傳到後端的指令

##以下為老師程式碼

###model

#MVC連接資料庫db兩大做法 04Model_EF

##1.Ado.net 蟑螂

.net 1.0 就有了

###03Model_ADOnet/Controllers/HomeController.cs

###老師步驟

###/03Model_ADOnet/Views/Home/Create.cshtml

###/03Model_ADOnet/Views/Home/Index.cshtml

##2.Entity framework

Webform

則是datasource control 控制項

##以下開始講 EBTITY FRAMEWORK

開新專案

##LINQ 語法sql的倒裝句

Sql

selec * from

Where

Groud by

Having

Oderby

但linq是從from

### Lanbda方法可以不用寫那麼長的linq

就像view要用到@razor所以講一樣

###以下範例為高雄銀行考題

首先宣告一個

一般方法

宣告 陣列 成績

題目是從大到小排

通常使用氣泡排序

這邊使用EBTITY FRAMEWORK

Linq語法 的 擴充表示法 Lambda

Var show = Score.orderbydescending(s=>s);

呼叫內建函數來用 ( 泛型 物件 上面那個

但高雄銀行是要把內建函數內容寫出來

接著迴圈一個一個讀出來

Linq大部分都在操控資料

例如 排序 抓取位址資料 常用的就會做成擴充方法lambda

如果要用的功能沒有就要自己寫

用pre linq 寫起來就會比較長

Linq 查詢運算式

原生sql select * table order by score desc // dml

物件 result=

from資料表名稱in集合

where條件

orderby資料表名稱descending

select 資料表名稱

感覺原生要先學熟在學擴充 …

擴充方法加總

Result.sum()

C#有些擴充語言可以做到某些功能但某些功能沒有內建可能R有JAVA有

看那個語言適合做甚麼可以做什麼不可以做甚麼

##接著模擬登入 LoginMember

建立一個model但是在controllers裡面的類別檔案

Codefirst?? 自動建立pk ? 後面會講?

沒有規定model一定要放在models資料夾

也沒有規定 controller一定要放在controllers資料夾

只差在namespace放置位置跟using引入

在回到homecontroller.cs

Arraylist new ???? 物件陣列建構子 ( 可以一次new一堆物件

然後建構裡面的物件

model在controllers裡面的member.cs內

然後也是pre linq 跟lambda linq兩種方式去操作這些資料

### 運算要用c#的語法不能用sql語法

###以下為老師程式碼

###model

###/04Model_EF/Controllers/Member.cs

###04Model_EF/Controllers/HomeController.cs

###老師步驟

##接著建立資料庫?? 04Model_EF/北風資料庫

Model右鍵

北風資料庫 ( 微軟公開練習資料進銷存系統 ( 老師這個版本是簡化過的

純淨態類別永久性儲存類別圖 相對應的是 存在記憶體內的暫存

導讀model了解內容

實際上這些model在做ADO時自動成為class

###Db first 所以會出現一些自動出現的東西 例如關聯等等

Model用controller操控

要講linq操作

這次是真的要從資料庫讀

剛剛都是把資料放在專案檔案內

Mvc方式是透過model去存取資料庫

新增一個 linqController.cs

做db物件

然後新增一個 string showenployee()

用pre linq 取資料

然後再用 lambda linq 取資料

兩種方式

然後想要秀在view上面的話 老師這邊是套版view

###很常犯的錯誤 記得 return 後面 view() 參數要回傳資料回去不然看不到

##以下為老師程式碼

###04Model_EF/Models/

###04Model_EF/Views/Linq/Index.cshtml

###04Model_EF/Controllers/LinqController.cs

##老師步驟

#在model裡面建立驗證功能

接著dbstudent.mdf建立model

Webform時用驗證器控制項

Mvc時

寫在model或寫在view或寫在controller

這邊簡單介紹後面會複雜介紹 …

Dbfister時很多程式碼物件會自動產生要相信做db的人

回到model tStudent.cs

Using sysyem.componentmodel

即可用

[Displayname(“”)]

即便是db產生的model也可以在model檔案裏面去修改model

驗證必填 [required(ErrorMessage =”學號不可空白”)]

驗證信箱 [EmailAddress(ErrorMessage =”信箱格式有誤”)]

驗證範圍 [Range(0,100,ErrorMessage =”信箱格式有誤”)]

好了model弄好了

新增一個 ValidationController.cs

做model驗證示範的view的controller

首先 加入資料庫

在把資料庫物件丟到變數

在return到view

新增一個view範本即可

接著稍微修改這個範本產生出來的東西

好了之後我們只實作creat 所以只留delete

回到ValidationController.cs

建置一個 actionResult Create()

連接view

[httpPost]

actionResult Create(tSttudent stu) pk

做資料回傳資料庫的動作

首先先判定驗證通不通過 利用

Modelstate.isvalid

才可以

將tstudent stu加入 db中

然後儲存結果

傳回redirecttoaction (“index”)

如果沒有驗證成功則return View(stu);

接著實作delete

新增一個actionresult

傳入要delete的pk

然後利用物件去查詢它然後刪除

確定刪除

回到index

###老師程式碼如下

###04Model_EF/App_Data/dbStudent.mdf

##04Model_EF/Models/tStudent.cs

###04Model_EF/Controllers/ValidationController.cs

###04Model_EF/Views/Validation/Create.cshtml

###04Model_EF/Views/Validation/Index.cshtml

Last updated

Was this helpful?