demoshop

demo, trying to be the best_

ViewModel 的使用在 ASP.NET MVC 中是一個很重要的觀念,但是初學者很容易遇到一個問題就是「一個頁面只有一個 ViewModel 怎麼夠用」,大多數的初學者可能就直接使用 ViewData 或 ViewBag 去傳遞第二個資料物件,如果你這樣傳最直接的問題就是喪失了「內建驗證」的方便性,那究竟應該怎麼正確的處理多個 ViewModel 的問題呢?
因為太多人問了,所以 demo 決定寫一個簡單的範例來有效解決初學者的多數 ViewModel 的問題。

最終目的是完成一個頁面,同時支援「使用者註冊」與「使用者登入」的功能,現在就讓我們來一步一步的完成下去

在 demo 講 ASP.NET MVC 的課程時,我都會很早就提到網址路由(Route) 的部分,不過只是簡單的說一下預設的對應方式,因為不會自訂網址路由(Route)並不會影響整個網站的開發,頂多就是做出來以後網址有點醜而已....

但是當開發者已經進階到開始要改網址路由(Route)時,就會發現這裡面學問還真多,而本篇不是要詳細的說明基本的部分(基本說明請參考《ASP.NET MVC4網站開發美學》),只是要介紹如何藉由實做 IRouteConstraint 來自訂約束(constraints)條件,當你學會了自訂約束條件後,網址路由設定的難度就會相對簡單很多。

如果你已經開始使用了 MVC4 而且很不巧的你會使用到 IE6、7、8 那你就會踩到這個雷,demo 一直很鼓吹各位開發 MVC 的朋友要使用 MVC 內建的驗證機制來簡化整個網站表單驗證的部份,當然有雷也必須要和各位誠實稟告,今天要說的就是日期驗證的雷。

最近 VS2012 的 RC 出了相信很多衝動熱血的開發者都已經安裝了,但是舊有專案還是要維護其實可以叫客戶出錢重寫,像 demo 手上就有一些專案是 ASP.NET MVC2 的版本, VS2012 根本無法開啟,用過 VS2012 以後絕對是不會想回去 VS2010 的,所以就動手來升級 MVC2 專案到 MVC3 吧。

一般在開發共用元件時都會利用 Summary 的標記讓其他共同開發者可以明確的知道這 method 介紹或使用限制,有些專案 Leader 甚至會要求所有的 Public method 都需要標記 Summary (通常是因為要方便產生文件),自己寫的好辦,有些是使用一些 Open source 的 Class 不可能去要求對方作者寫吧,自己補的話可能也只是淪落為使用 Ghost doc 來翻,其實這是可以避開的(當然要專案成員都同意你避開)。

Uploadift 是一套基於 jQuery 和 Flash 的檔案上傳工具,提供了上傳進度以及多檔上傳的功能,畫面簡單大方是一個相當不錯的上傳套件。

這裡說的無法正常登出指的是使用了FormsAuthentication 類別 來實作的登入登出機制,並不是使用 Session 來實作的登入登出,當你在 ASP.NET MVC 使用來做登入你會發現,熟悉的 FormsAuthentication.SignOut(); 竟然會無法登出,這方面應該是屬於 ASP.NET MVC 的 Bug ,既然官方沒改那我們就繞路自己解決吧。

這標題看起來好像很猛,但是其實這種需求本身就是沒意義的需求(破解的方式太多種),但是江湖路走多了,還是會遇到這種需求為了避免花費太多時間在這種地方,所以 demo 就整理了這篇文,列出實作方法與破解方法讓遇到此需求的朋友可以明確的知道各種限制的作法與破解方法。

大家都知道在開發網頁的時候因為 Server 的數量遠不及 Client 所以經常會使用到 Cache 技巧,不管是 OutCache 或是 RunTime Cache 都是降低 Server 負載的好方式,但是你有沒有想過到底 Cache 放對東西了嗎?或是放了太多一樣的東西,如果快取用的不好不但沒有幫助到效能反而可能拖累整個 Server ,因此 demo 要推薦一個早在 2006 年就推出的好東西,它可以讓我們方便快速的看到快取的狀態和內容進而調整快取的數量與值。

有使用 ASP.NET MVC 的朋友應該會對於 TryUpdateModel 有一定的認知,他不但可以利用 Metadata 來做欄位的驗證確保資料的正確性,也可以指定更新的條件以及不更新的條件來達到萬用的功能,因為他的好用所以 demo 也是經常使用他,但是使用的時候多少會覺得每次都要指定欄位很麻煩嗎?這裡告訴大家一個小技巧,讓你的 TryUpdateModel 更順手。

話說光棒 LinghtBar  這玩意是一個很平常的效果了,記得當初 demo 剛開始在寫程式的時候就有一個想法,想做出一個萬用的方法讓以後很方便,但是那時候我的功力寫不出來,只寫了一個半殘的程式,而日子就這樣過去了我也沒有再去思考過這件事情,直到最近又有機會碰到需要光棒效果的網頁,而且沒有設計人員幫我處理,既然又要自己來了,那就搞好它吧

在 ASP.NET MVC 2.0 以後增加了一個 Area(區域)的概念,對於區分開不同模組或是共同開發的時候相當好用,A區域的不會影響到B區域,但是如果很不巧的使用到了相同的 Controller 名稱,那可是會發生錯誤的,一開始可能會以為這是個限制,但是仔細想想,都已經有了區域概念卻還互相影響是很蠢的,因此我們可以利用 Router 的限制規則來排除這個問題,讓個別的區域開發者可以不用顧慮到命名的問題。

已經有在開發 ASP.NET MVC 的朋友一定知道,ASP.NET MVC 找頁面的預設路由就是目前資料夾找不到再去 Shared 目錄找,因此對於一些共用的頁面就都會丟在 Shared 目錄,共用的東西多了以後整個 Shared 就醜得很,所以本文要來說一個很小很小的技巧就是再加上資料夾來分類 Shared 目錄內的頁面。

之前 demo 有寫過一篇「驗證 AJAX 動態載入的頁面是否已被導向(簡單版)」引來不少朋友提供一些實作的建議,所以今天要再來寫一篇利用 ASP.NET MVC 的 ActionFilter 機制,來實作的的文章。

一般來說當清單頁面執行了刪除的功能後,都需要利用重新載入頁面的方式來讓清單更新,不然使用者一定會說為什麼刪除沒有效果,為了刪除而去重新整理一次頁面還滿耗資源的,所以有很多人會自行撰寫 AJAX 的方式來更新,雖然是不難但 ASP.NET MVC 內建就有了 jQuery 和 MicrosoftAjax ,所以對於刪除這件事情就可以做得更聰明更自然,以下就來看看吧。

通常專案上線後還是必須要監控網站的健康情況,但上線後的設定都會改成<customErrors mode="RemoteOnly" />總不可能有錯還回到正式機去改成Off以後再來偵錯吧,而且有些是客戶才會遇到的錯誤,在資訊不明確的狀態下也是很難除錯的,而這套Elmah就是一套相當好的工具,它可以把網站開始發生的例外全部都記錄下來而且支援多種通知方式,記錄的內容也相當豐富,對於維護網站品質有一定的幫助,如果你有案子在手上需要維護,這套工具是可以幫助到你的。

寫了 MVC 應該很容易遇到需要使用 JSON 的時候,ASP.NET MVC 支援多種 ActionResult 其中一種就是 Json ,demo 今天遇到一個需求,我必須將一個複雜型別 List<Dictionary<string, MyClass>> 序列化後存放於 DB 供需要時取用,原本很直覺的想說那我就序列化為 XML 存放,但程式寫完執行卻得到了黃紅畫面的朝弄,我竟然忘記了實作 IDictionary  介面的類別 (例如 Hashtable) 並不能序列化為 XML。

將西元轉換為民國年是台灣開發者經常遇到的問題,在這之前demo都是很自然的把年份-1911拿達成,但客戶要求顯示的日期需要有星期,因為減了1911年星期會相差一天,於是就乾脆直接擴充 DataTime 作一個轉換民國年的擴充方法。

如果我們建立了一個表單,而且將此表單設定為 GET 並且又是使用圖片按鈕來當 Submit 在傳送的時候就會多出 x y 的參數,雖然好像很貼心,不過看了還滿礙眼的。

ASP.NET MVC 的一個很重要的機制 URL Rewrite 但是當規則寫一堆以後真的很難偵錯,雖然可以利用Unit Test 來做測試,但是不一定每個人都會實作測試的,因此推薦一個快速測試Routes 的工具。