2012年8月23日 星期四

那些年 The Boss 教會我的 MVC

長久以來搞不懂 ASP.NET MVC 在玩什麼把戲

雖然知道 MVC 是一個設計模式

將 Model View Controller 分離 已達成 易於擴充及維護的目的

理論歸理論 但是實際建立一個 ASP.NET MVC 專案之後 卻發現啥都不會用

而且綁手綁腳 隨便玩弄一下就報錯了 也不知哪裡有錯

更慘的是正體中文僅存的 MVC 書 是2.0的 還絕版了

英文...算了吧

這時神之音告訴了我一句話


 

 

try to remember some of the basics of web server

 

 

The Boss表示:Snake, try to remember some of the basics of CQC

 

 

晴天霹靂 豁然開朗 そうが なるほど

雖然早就知道 ASP.NET 的控制項是 微軟的陰謀

但是仍然不知不覺中了他的毒

雖然給你相似的操作經驗 讓寫網頁貌似在寫視窗

但是實際上網頁根本跟視窗的運作相悖甚遠

 

 

client 丟出 request 給 server

server 返回 response 給 client

 

 

記住這兩句箴言後 就可以接下去來場真正的挑戰了

 

 

喜新厭舊 所以選 MVC 4

避免挫折 選 Internet Application 會有預設的範例頁面

哪尼?! header 還藏有 響應式設計

執行起來果然比之前好看 而且會員登錄註冊啥的都有 只是不知道他怎麼辦到的

 

 

接下來 不要好高騖遠 先從最簡單最廢的 按按鈕 演算 求值 的開始玩

hollow words 老梗就免了 這裡玩個 算 BMI 的 小工具

如果是 ASP.NET 的話 拉控制項 估狗 BMI 算式 到完成 熟練的話不需 1 分鐘 像這樣...

 

 

如果都不要用控制項呢?用音曝的話辦得到嗎?

打娘胎到現在都在拉控制項的話 現在就遇到第一個大挑戰

最後可能弄個像這樣的

有血輪眼的朋友們想必一眼就看破我的花招

<form id="form1" runat="server">

這個也是控制項呀 唬誰 -.-

沒錯 在 ASP.NET 的世界裡 很難不用控制項 去做事

而且也沒必要這麼做 畢竟 ASP.NET 控制項 活了這麼久 開發了無數系統 他還是有他美好的地方及價值

不必為了摘一朵花 越過了整個青康藏高原

我想料理靠的是廚技而非廚具

 

 

回歸正題 上面的例子不是說嘴酸的

重點在於 沒有控制項的時候 該怎麼做

 

 

回到MVC 在 HomeController 之中 有3個 ActionResult

分別對應網站的三個 View (頁面)

現在依樣畫葫蘆 增加一個名為 testBMI 的 ActionResult

光有 ActionResult 還沒有用 必須要有對應的 View 也就是真正用來顯示的頁面

對 ActionResult 的名稱右鍵 add View

跳出一堆選項 這裡先不管 選擇 /Shared/_Layout.cshtml 當主版頁面 讓頁面有相同風格

他就自動生了個 /Views/Home/testBMI.cshtml 現在就能執行了

@ViewBag.Message表示:testBMI yooooooooooo~

然後就是乾坤大挪移 把 HTML 搬過來

@Html.TextBox 是 MVC 的 HtmlHelper 先把他當作替代 控制項 的東東就好了

@ViewData 則可以記住東西 有點像 viewstate

這時再加入一個同名的 ActionResult 並接參數 FormCollection Form

並註明屬性(attribute) [HttpPost]

這表示當這個頁面被 Post 的時候 會進入這個方法之中

而 Request.Form 則會被 參數 Form 所接住

偵錯就能看到 當輸入值 按下"算" 之後就會進入中斷點

最後的 Model 反而是最簡單的 搬過來變成類別就好了

Jerry大大 表示:Model要肥,Controller要瘦,View要笨

但是很抱歉這個例子太蠢 Model 只有幾行ˊ_>ˋ

Post 的方法最後長這樣

最後就玩弄吧 沒什麼好說 標準工程師身材 -.-

 

 

以上

2 則留言: