2019/0604/ASP.NET_MVC Part2 PhotoSharing Controller & Filter & ADO.NET & View@RAZOR Helper

#MVC Part2 ( 早上自習

#02_Controller

前情提要CodeFirst

現在要自己寫controller跟view

###回覆留言用Ajax方式 ( ??? 可能之後要做

ViewData帶去View就消失了

##接著先做controller

###PhotosController.cs action create()

新增留言

首先 新增一筆新增時間到view用於顯示

接著處理httppost

[ ]可以用 , [ , ]寫 但通常還是要同一組

HttpPostedFileBase利用此物件接image檔案

photo.ImageMimeType = image.ContentType; 抓副檔名

照片轉為byte陣列

存到模型後 存入資料庫 然後轉到index

那如果驗證不通過就停留在create

記得這裡也要餵今天日期不然抓不到

新增範本檢視再做更改 ( 覆蓋之前範本產生的

Bundle ?? 之後會講 可以把 庫弄成一包 ?在 app_start bundle.config

下個單元才會自己寫view ?

接著寫

刪除確認畫面

比較特別無法做多載?

Get 部分做 例外回傳

Httppost 這裡如果 參數一樣是不能做多載的 那怎辦呢 ?

直接修改action頁面即可

補充[ActionName("Delete")]

然後查找並刪除。

回到index

接著新增範本view 去做一些細部修改

後面要講錯處理的進階作法

Controller 到此介紹完畢

接著講View並把之前沒講到的補講

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

###老師講解

在講view前先講

##03_ActionFilter 過濾器

示意圖

Web.config 伺服器層級的組態設定

ApplicationInsights.config應用程式組態設定

Global.config 應用程式組態分類

HandleErroAttribute 錯誤幫助者

做個猛一點的範例

過濾器 抓取使用者全部動作存入資料庫 ( 網站被攻擊時可以查看並鎖ip

其實可以寫在controller裡面寫 但要寫幾千幾百??

範例

log 所有的請求 時間 ip host brower type

log 對那些 action 請求

首先新增資料庫 用於儲存log

寫一個一般類別而不是新增控制器 ( 差別在 繼承哪個 namespace

Using mvc

繼承 ActionFilterAttribute 驗證基底類別

做一個動作就要存資料庫一次

##直接寫 ADO.NET ??

Using System.data.sqlclient

連線資訊 (以下偷吃步

Using system con

以前是利用sqldatasourse 建立 connectionstrings

把sqldatasourse拉進去然後再設計那邊用選的選完後webconfig就會產生connectionstrings

現在要自己寫

直接 sqlconnection 物件自己重新寫一個

然後就能下 sqlcommand

接著寫個 void 函數 然後傳指令近來就做 打開 傳旨 然後關閉

寫action 把資料存到資料表 pk 跟時間都是自己產生的

所以只要傳入其他欄位

有兩種方式可以寫

第一種 複寫 onActionExecute ( 先後 紀錄

在外面寫一個logValies函數傳入ROUTEDATA用於?

首先清空 PARAMETERS

路徑 抓出 controller action parame的值

有可能是null但不用if的寫法

接著用 ado.net 存取方式 與 parameter參數資安用法

存值進去

回到

ValueReporter:ActionFilterAttribute

public override void OnActionExecuting(ActionExecutingContext filterContext)

public override void OnResultExecuted(ResultExecutedContext filterContext)

回到複寫那裏?? 看無 講太快 = =

在做一個 requestlog 抓 httpcontext 裡面的 7個值

封包 = httpcontext

抓ip host browser用ServerVariable 能抓啥要去查 MSDN

接著 requestType userHostaddress userhostname http method則直接抓即可

接著再做一次 ado.net 存取方式 與 parameter參數資安用法 存值

接著做複寫 ? OnResultExecuted(ResultExecutedContext filterContext)

呼叫 requestlog

接著要去 FilterConfig.cs 註冊我們這個自己建立的過濾器

要using 或namespase位址要對

註冊好後

哪裡要用到過濾器必須指定

[ValueReporter] 執行到哪就做過濾器

正面表列?負面表列 ( 會在講 = = ?

Action 層級 controller 層級 application層級的

存取資料庫報錯

位址問題 要修正 PhotoSharingContext 的 base

Locodb ?? entityframwork

但是我們用 connectionStrings 資料存取層

放進不同的事件內 ( 成功才寄 失敗不記之類的

所以才會有那麼多 function 因應不同事件做存取

我們的Filter 是 application 層級的 所以所有動作都會存入

近端存取 存取不到ip

###controllers/ValueReporter.cs

###ftp://mvc@10.10.3.189/03_ActionFilter/PhotoSharing/Controllers/PhotosController.cs

###老師步驟

接著講

##04_View

@RAZOR Helper

##View單純很多

接著處理重建 display ( 手工打造 ( detail 需要 id

回到controller 的 display action 新增檢視

Empty 但 帶model的 並覆蓋 會把剛剛display的東西洗掉

###keyword

Fieldset legend

@Model.Title

@Url.Aciton()

Img-responsive/thumbnail

@Html.DisplayFor

@Html.DisplayNameFor

@Html.DisplayText

@Html.ActionLink

接著處理 creater view一樣的步驟 且帶model

差別在 create 有 form 用於上傳

直接用html5語意標籤簡單排版

然後用 simple binding 做資料傳遞處理

但是剛剛的東西拿掉 改為用

##@RAZOR Helper

@Html.BeginForm(actionname,controllername,formmether,new{enctype前端屬性}){}

@Html.AntiForgeryToken()

@Html.ValidationSummary()驗證通過不通過的管理器

@Html.LabelFor(model=>model.Title) 不用指定id name 但要

@Html.EditorFor()

@Html.ValidationMessageFor()

不能填就用displayfor即可

Using ???

避開 filter ? 資料庫重建 action req log ?

mvc model 獨立?

Controller怎樣都不會影響model???

到此ok 到時會講趴修view

Last updated

Was this helpful?