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?

