2014年12月30日 星期二

練習題 - ASP.NET MVC 產生 RSS Feed

其實這個功能在這兩年所帶的 ASP.NET MVC 實戰課程裡的一個部分,主要是用來講述如何製作一個自訂的 ActionResult,而剛好產生 RSS Feed 內容的功能並不算太複雜,所以不會使用到太長的課程時間,再加上在網路所搜尋出來有關 ASP.NET MVC 如何產生 RSS Feed 大多都還是用字串組合的方式,好一點的會用到 XmlWriter 操作。

今天剛好同事詢問這一個功能,所以就把課程裡有關 Rss Feed 的部分給翻出來,藉此瞭解如何自訂 ActionResult 以及如何使用比較好的方式來產生 Rss Feed。

 


2014年12月28日 星期日

ASP.NET MVC + Bootstrap + Font Awesome - Font Awesome for MVC Razor Tools 介紹

上一篇文章為各位介紹了「Semantic FontAwesome Helper for MVC Razor」這個在 ASP.NET MVC 輔助編輯使用 Font Awesome 的套件,但其實就編輯習慣而言,該套件在編輯 View 時的使用並不像我們使用 MVC 的 Html Helper 那樣類似,反而會比較像是在使用 Server 端程式的語法操作,所以這邊就再介紹另外一個套件,在使用上就會像是使用 Html Helper 那樣直覺與熟悉。

 


2014年12月21日 星期日

ASP.NET MVC + Bootstrap + Font Awesome - Semantic FontAwesome Helper for MVC Razor 介紹

之前曾經介紹過如何在 ASP.NET MVC 網站專案裡使用「FontAwesome.MVC」這個套件,讓我們不必徒手將 FontAwesome 安裝到專案裡(雖然徒手安裝也沒有多繁雜),畢竟能夠減少一些安裝步驟總是可以讓我們節省一些時間,

mrkt 的程式學習筆記: ASP.NET MVC + Bootstrap + Font Awesome

而這次要介紹另一套也是有關於 Font Aewsome 的 Nuget Package「Semantic FontAwesome Helper for MVC Razor」,讓我們在 ASP.NET MVC 編輯 View 的時候,就可以直接以 Razor Syntax 去操作使用 Font Awesome。

 


2014年12月13日 星期六

Visual Studio Extensions - BetterStartPage

一段時間沒有寫文章了,最近工作量大增,以致於白天在工作時就已經耗盡腦力與體力,當晚上下班回家之後就沒有多餘的心力寫文章,每晚坐在電腦前都會下定決心要寫出一篇文章出來,但專注力總是撐不到五分鐘,週末時間也總是有另外的事情,所以就相隔了快兩個星期都沒有寫任何文章。

這次介紹個 Visual Studio 的一個小擴充功能「BetterStartPage」,雖然不是有什麼強大功能的套件,但是對於電腦裡擁有一堆 Solution 的開發者而言,這個 Extensions 就相當方便。


2014年12月3日 星期三

ASP.NET MVC + Bootstrap + Font Awesome

其實大家對於 ASP.NET MVC + Bootstrap + Font Awesome 的組合應用已經相當熟悉了,這一篇並不會講說 Font Awesome 是個什麼樣的應用(如果還真的不知道然後又想要瞭解的話,可以去 Google),這一篇會來說明幾種如何在專案裡去加入使用 Font Awesome 的方式。

 


2014年11月26日 星期三

基於 PagedList.Mvc 的基礎,作一個自己的分頁 ( Pager )

PagedList 與 PagedList.Mvc 已經用相當多篇的文章來做說明,這次來點不一樣的,就如同文章標題所說的,我們還是繼續使用 PagedList 與 PagedList.Mvc,但是卻不會去使用 PagedList.Mvc 所提供的 Pager,而是另外去建立我們自己的 Pager。

會這樣做的原因是為了想要讓分頁可以符合設計師或是前端設計師所做的分頁列樣式,因為 PagedList.Mvc 在使用上是可以符合大部分的情況,但是在一些比較特殊的使用情境下就無法滿足需求,所以作一個自己的 Pager 在就有其必要了。

 


2014年11月18日 星期二

ASP.NET MVC + Multi Level Dropdown menu in Bootstrap 3

其實之前也寫過類似的內容,不過那是使用 jQuery EasyUI 的元件,在臺灣使用 jQuery EasyUI 的人實在是少數,不過不管是不是有沒有使用 jQuery EasyUI,重點是在於如何處理樹狀結構資料以及前端如何應用遞回的觀念將樹狀選單結構給做出來。

這一篇則是將同樣的樹狀結構改使用 Bootstrap 3,雖然不是做出 TreeView,而是使用 Dropdown Menu 的型態將樹狀選單給做出來。

 


2014年11月11日 星期二

回應「練習題 - ASP.NET MVC 資料列表顯示 + 分頁 + 查詢 + FormMethod.Post」

上個月發佈了「練習題 - ASP.NET MVC 資料列表顯示 + 分頁 + 查詢 + FormMethod.Post」這一篇文章,我沒有想到這一篇的關注與迴響是這麼熱烈,讓我出乎意料,所以緊接著在月初的時候我就趕緊把之前有關使用 PagedList.Mvc 操作資料分頁文章裡的範例程式給重新做了整理,然後將這些範例程式給發佈到 GitHub 上面,但是更讓我感到訝異以及不可思議的是反應與前面那一篇有天壤之別,流量比例相當懸殊,我還真的猜不透呀!

練習題 - ASP.NET MVC 資料列表顯示 + 分頁 + 查詢 + FormMethod.Post」這一篇文章裡的回應相當多,不過大部分都是一來一往的問答,但是這些問答都是反應這些朋友在看我文章然後去做出這些功能時會發生無法執行的錯誤,但是回應裡的訊息都沒有詳實的將錯誤發生的相關資訊跟我說,我有如瞎子摸象一般,根本毫無頭緒呀!

我這邊文章以及發佈的範例程式碼,都是經過我這邊再三測試並確定沒有嚴重錯誤以及可以正常執行後,我才會發佈出來,無論是你部署到本機端的 IIS 裡,或是發佈到 Windwos Server 裡,甚至是部署到 Microsoft Azure 上面都是可以正確執行的。

 


2014年11月2日 星期日

圖片裁剪大頭貼功能 - ASP.NET MVC + jQuery + imgAreaSelect 程式範例 @ GitHub

應該大家都發現到了我最近都沒有新的文章發表,反倒是一直整理以往部落格文章的範例程式然後放到 GitHub 上,必須老實說,最近一個月為了工作上的新技術需求,所以都在研究、練習中,在公司裡花了很多的時間以及腦力在學習新技術,以致於下班之後就沒有多餘的力氣去寫新的技術文章,既使到了週末休假也是一樣。

所以現在能夠做的事情就是整理以前的文章範例程式,一方面做整理,另一方面也是做複習的動作,因為我並不是直接把以前寫好的程式放到 GitHub 上,而是在 VS2013 裡開新的專案,然後照著以前的文章的內容與描述並且看著就程式再重新做一次。

以這一篇來說,原本的範例程與文章是在兩年多前就已經寫好的,當時是用 VS2010 來開發的,時至今日,我連自己的開發電腦也不再安裝 VS2010 了,所以還必須先準備一台 Windows 7  虛擬機器,再安裝 VS2010,還原當初寫文章做範例的情境,雖然是按照當初的文章與程式來重新做一次,不過還是有做了一小部分的修改與調整,不要以為重新照著做會很快也很容易,實際做過幾次之後就會有種感覺,那種感覺就是我還真不知道以前我腦袋是在想什麼,怎麼有些地方的寫法會是那樣做咧?有一種想把拳頭往那個傢伙腦袋敲下去的衝動。

 


2014年10月26日 星期日

ASP.NET MVC 資料分頁操作 - 使用 PagedList.Mvc @ GitHub

資料分頁操作在系統開發裡是一定會遇到的一個基本功能,在 ASP.NET MVC 處理資料分頁操作時,因為沒有內建的預設功能,所以有些人會選擇自己實作分頁功能,不過寫得好不好就見仁見智,而大部分的開發者都會選擇直接使用第三方套件,例如 MvcPaging 或 PagedList.Mvc。

這兩個第三方套件在這個部落格裡都有為數部少的文章做介紹,不過這一年多來主要都是使用 PagedList.Mvc 來實作資料分頁的功能,在使用上不會太複雜只要抓住幾個重點就可以,這邊就把過去幾篇在說明如何使用 PagedList.Mvc 的文章範例做了整理,將範例程式檔放到 GitHub 上,讓需要的朋友可以一邊看著文章然後一邊對照程式,這樣比較容易吸收、瞭解。

放到 GitHub 上的範例程式都是可以正常執行的,建議各位不要只是在 GitHub 上面瀏覽程式,而是直接將原始碼下載一份,直接在你自己的電腦上面執行。

 


2014年10月21日 星期二

ASP.NET MVC 使用政府公開資料 @ GitHub

將去年一連三篇有關使用新北市政府公開資料所做的範例給放在 GitHub 上,

ASP.NET MVC 使用政府公開資料 Part.1

ASP.NET MVC 使用政府公開資料 Part.2 - 增加條件過濾

ASP.NET MVC 使用政府公開資料 Part.3 - 資料分頁 使用 PagedList 的 StaticPagedList

這個範例主要是在說明如何在 ASP.NET MVC 的網站裡使用其他服務所提供的 JSON 資料,然後將接收的資料轉換為物件,並且在頁面上以分頁的方式顯示,再加入搜尋條件以方便對資料做查詢,最後則是藉由這一個範例說明 PagedList.Mvc 的 StaticPagedList 功能。

 


2014年10月20日 星期一

練習題 - ASP.NET MVC 資料列表顯示 + 分頁 + 查詢 + FormMethod.Post

這是一個蠻常見的功能,使用 ASP.NET MVC 開發,將某一個資料以列表方式顯示,並且加上分頁功能,另外還要有查詢功能,而希望顯示分頁的時候可以保留查詢的條件(也就是查詢結果也要能夠分頁顯示),因為有可能查詢的欄位會有相當多個,所以不希望是以 Get 的方式讓查詢條件以 QueryString 的方式傳遞到後端,而是使用 Post 的方式來做傳遞(因為這不是用在一般的前台頁面,而是常見於後台的操作頁面)。

其實這樣的功能也不是相當複雜,我在之前的資料分頁文章也曾經做過說明,例如以下這一篇:

ASP.NET MVC 資料分頁 MVCPaging 2.0 應用 Part.1:一般、表單(Form)

不過這一次會有不一樣的方式來實作,分頁套件會使用「PagedList.Mvc」,因為查詢條件可能會有相當多個的情況,所以會建立一個 ViewModel 來使用,藉由這樣的一個範例說明可以讓初學者能夠瞭解類似這樣的需求應該要如何處理。

 


2014年10月19日 星期日

Visual Studio Extenstions - Codinion

不論是我在測試開發用的電腦或是在工作時所使用的電腦,電腦裡頭的 Visual Studio 都會安裝一些幫助我開發能夠更有效率的擴充套件,有些是免費的而有些則是需要付費購買的,我的觀念是使用者付費,而且我主要的工作就是使用 Visual Studio 開發程式,所以我會花錢購買擴充套件來讓我的工作產能有所提升,身為一個號稱「專業」的程式開發人員就必須要為自己的工作做點投資,有投資就一定會有所收穫。

這篇要介紹的是一個新的擴充套件「Codinion」,雖然是個小套件,但只要是能夠對我們開發有所幫助的都是好套件。

 


2014年10月18日 星期六

ASP.NET MVC 匯出 Excel - 讓使用者挑選要匯出的資料欄位 @ GitHub

最近開始把一些之前在文章裡用來說明的範例做了整理,然後逐步將這些範例都放到 GitHub,其實早在之前我就已經將一些範例都到 GitHub 公開給大家瀏覽與下載,而且我所公開的範例都是可以正常執行的,這麼做的用意就是要讓大家能夠更加瞭解文章裡的程式、截圖所表示的內容,文章礙於篇幅的關係,所以只會對部分的程式加以說明,我一直都認為我在文章裡所交代的已經相當詳盡了,但總是有人反應為何照著我文章裡的程式下去做,但總是做不出最後的結果,有時候真的是我沒有交代一些不是重點的細節,但是這些細節總是會影響程式的執行,雖然這些問題在有經驗的開發者眼中是可以輕易解決,但還是有蠻多開發者光是看文章然後跟著做就已經頭昏眼花了,遇到問題後就沒有太多精神可以去研究如何解決了。

所以公開完整的原始碼就是讓大家可以直接看到我所完成的內容,並且不是片段或是無法執行的假東西,而是可以正確執行的專案,因為我最怕聽到的就是「我都有照著你文章的內容,但還是做不出來」「我所寫的程式跟你文章裡所寫的都是一樣的,為何執行還是有錯?」「架構、程式、格式都一樣,還是一樣做不出來」,有時候並不是完全照抄就能夠做出一樣的東西,總是會有一些地方、細節會影響最後的執行結果,所以當看著我的文章照著做然後遇到問題的時候,就請到 GitHub 上面看原始碼,甚至於我更建議大家去下載完整的原始碼,兩相對照之下就可以知道你所做的到底是遺漏了什麼關鍵或是疏忽了什麼內容。

 


2014年10月12日 星期日

Visual Studion Extexsions - Accent Occurrences

我會在 Visual Studio 裡面裝蠻多擴充功能,會裝這麼多最主要就是輔助我們程式開發,讓我們可以用最有效率的方式來完成程式,在 twMVC #15 研討會裡,我所主講的「開發的效能與效率」就有介紹了相當多的 Visual Studio Extensions,裡頭所介紹的擴充功能都是我實際有在使用而且用了一段時間才會介紹給大家,希望能夠幫助大家能夠更有效率的完成程式開發的工作。

我也曾經看過一些開發者的 Visual Studio 沒有裝擴充套件,在幫他們解決程式問題的時候,總覺得用得不是很順手,而且明明有些功能可以在安裝擴充套件之後就能夠對我們的開發上有很大的幫助,但是他們還是寧願用很麻煩的操作方式去慢慢地完成他們的工作。

我在簡報裡有列出一個擴充套件「Highlight all occurrences of selected word」,這個套件唯一的功能就是將我們在編輯器裡所選擇的字都給高亮顯示起來,不要小看這個功能,在程式裡找尋關鍵字的時候將關鍵字詞給高亮顯示,真的很容易看出來,這個套件從 VS2010 開始就一直在用,既使現在使用 VS2013 也還是在使用,但是直到最近才發現到另一個套件也有同樣的功能,而且還可以讓我們自己設定高亮顯示的顏色,這套件就是「Accent Occurrences」。

 


2014年10月7日 星期二

ASP.NET MVC 匯出 Excel - 讓使用者挑選要匯出的資料欄位 Part.4

經過前面三篇的整理過程之後,在這一篇將會用另一個新的 Controller 來做說明,所以這一篇將會彙整前面的內容並實際應用操作,如果你是一個喜歡結果論的人,只向知道這些功能應該怎麼用的話,那就是看這一篇,而看完了這一篇之後,想要瞭解功能是如何做出來的,那麼就可以在去看前三篇以及再之前的內容。

 


2014年10月6日 星期一

ASP.NET MVC 匯出 Excel - 讓使用者挑選要匯出的資料欄位 Part.3

前一篇「ASP.NET MVC 匯出 Excel - 讓使用者挑選要匯出的資料欄位 Part.2」最後有說到,在最後的匯出時還沒有與我們所使用的 ExportColumnAttribute 類別有所關聯,使得匯出的 Excel 檔案裡面的表格欄位名稱依舊是原本的物件屬姓名稱。

另外就是我們一開始所建立專門用來處理最後匯出結果的 ExportExcelResult,在這個 actionResult 類別裡還必須要去執行匯出資料移除欄位的處理,也許有些人會覺得這沒有什麼,不過我是認為從匯出的原始資料將不要的欄位給移除的這個處理不應該是 ExportExcelResult 的責任,ExportExcelResult 只應該去關注處理接收進來的匯出資料、匯出後的檔案名稱、Sheet 名稱等,而匯出資料的整理應該是在之前就應該要先處理好。

這一篇就來整理這最後的匯出處理的部分。

 


2014年10月5日 星期日

ASP.NET MVC 匯出 Excel - 讓使用者挑選要匯出的資料欄位 Part.2

前一篇「ASP.NET MVC 匯出 Excel - 讓使用者挑選要匯出的資料欄位 Part.1」已經完成了可以讓使用者自行挑選要匯出的資料欄位功能,不過在文末也提到該篇文章內的做法其實並不是很好,問題就在於要匯出的欄位還需要另外用去設定匯出欄位的資料內容,而且匯出的欄位名稱是使用原始的物件屬性名稱,比較好的做法應該是匯出的欄位名稱也應該是以中文或是自訂文字的內容來顯示。

所以接下來就來做些改變,讓這個功能的設定可以簡單一些而不用這麼繁瑣。

 


2014年9月29日 星期一

ASP.NET MVC 匯出 Excel - 讓使用者挑選要匯出的資料欄位 Part.1

這一篇會用簡單且直接的方式來處理這個「讓使用者挑選要匯出的資料欄位」功能需求,先以簡單的方式來做出這個功能,之所以會說直接則是沒有經過太多的進階處理,只有稍微使用一些技巧與方式,把這一個功能需求給做出來,之後再進而修改並做出一個比較進階的解決方法。

 


2014年9月28日 星期日

ASP.NET MVC 匯出 Excel 簡單做 - 自訂匯出 Excel 檔案的檔名

這一篇是使用「ASP.NET MVC 匯出 Excel 簡單做 - 使用 ClosedXML」的基礎,那一篇的內容是使用 ClosedXML 來完成資料的匯出 Excel 檔,但是那一篇所完成的匯出 Excel 檔案功能是無法讓使用者自行決定匯出檔案的名稱,所以這一篇要做的就是加上一個簡單的小功能,在匯出檔案之前讓使用者可以自行輸入匯出檔案的檔案名稱,如果不輸入的話,匯出的檔案名稱就會使用預設值。

 


SQL 工具介紹 - ApexSQL Complete, Refactor, Search

這幾年的專案所使用資料存取方式都已經是已使用 ORM Solution 為主,所以就比較少會去關注 T-SQL 的操作,但有時候一些專案還是會遇到需要在專案裡使用 SQL Command 的時候,因為我不是 DBA 所以比較進階的 T-SQL 操作就會相當苦手,術業有專供,我還是乖乖地寫程式好了。

而在 SSMS 裡操作 T-SQL 的時候,在 SSMS 的 2008 版本之後就有加入了 Intellisense 的功能,可以讓我們寫 T-SQL 的時候就好像在 Visual Studio 裡寫程式一樣有提示讓我們可以更方便以及快速的完成指令碼編輯,但是內建的 Intellisense 功能略嫌不足,所以有一套更加好用的輔助工具也是許多人在使用「SQL Complete - Intellisense and Code Formatter in SQL Server Management Studio」,SQL Complete 有分免費版與付費版,如果像我一樣不是專職 DBA 的開發人員,其實使用免費版就已經夠好用了,而 SQL Complete 的好用與功能介紹,可以詳閱微軟 MCP demo 與黑暗執行緒的介紹文,「SSMS 套件可以完全取代 內建 IntelliSense 的好工具 dbForge SQL Complete | demo小鋪」「SSMS Intellisense強化工具-dbForge SQL Complete - 黑暗執行緒 」。

不過這邊並不是要介紹 devart  SQL Complete,而是要來介紹三個也是相當好用的 SQL 輔助工具,重點是這三個好用的工具是免費的,所以在這裡向各位做個簡單的介紹。

 


2014年9月24日 星期三

ASP.NET MVC - 使用 RouteJs - Part.3

第一篇介紹 RouteJs 所使用的專案是我用來做練習與測試的專案,所以整個專案的架構從前端到後端都與一般大部分 ASP.NET MVC 開發者所接觸的專案內容有很大的不同,所以這邊我就用另外一個專案,是去年的一篇文章所使用的範例專案「ASP.NET MVC 資料分頁 - 使用 PagedList.Mvc:Table 的 Checkbox」,那個專案剛好就是個把 Javascript 程式碼寫在 View 裡面,這一篇文章就來說明如何在專案裡加入使用 RouteJs 並且怎麼把頁面裡的 Javascript 程式碼從 View 頁面抽離出來到 JS 檔案裡。

 


2014年9月23日 星期二

ASP.NET MVC - 使用 RouteJs - Part.2

前面第一篇已經講了 RouteJs 基本的使用方式,其實 RouteJs 的使用真的蠻簡單而且也方便,因為曾經在某個與別人共同開發的專案裡看到同事為了要讓 View 裡面的 Javascript 程式碼也能夠取得正確的路徑,可以說花了一番功夫,而做出來的方式就是先抓取目前顯示頁面的 Controller 與 Action 名稱,然後再以字串的方式組合起來,這樣的方式一旦遇到變化題就必須要再花一番功夫去把正確的路徑給組合出來,而改用 RouteJs 則是可以讓這些麻煩事給簡化不少。

這一篇將要來說明「exposeAllRoutes」這個設定值的使用。

 


2014年9月22日 星期一

ASP.NET MVC - 使用 RouteJs - Part.1

我很不喜歡在 View 頁面裡直接下 Javascript 程式碼,必須要的話,我也一定會將全部的 Javascript 程式碼擺在頁面的最下面,我相當不能夠忍受 Javascript 程式碼穿插出現在 View 的任何一個地方。

View 頁面除了 Html Tag 之外還會有 Razor Syntax,我必須說在複雜的頁面顯示邏輯下,Html Tag 與 Razor Syntax 就有可能會相當混亂,此時如果再加入 Javascript 程式碼的話,這已經不是複雜或是混亂可以來形容,如果要選個適當的形容詞,那麼我會用「惡搞」,尤其是有些開發者為了要控制某些邏輯的情況下才能夠觸發哪些前端功能時,會用 Razor Syntax 來包住 Javascript 程式碼,也就是用後端程式的邏輯來控制前端程式的有無以及能否執行,這樣搞得前後端程式邏輯在頁面裡大亂鬥,這樣的做法就好像回到十多年前開發 ASP 一般。

我在專案裡對於 View 頁面所使用的做法是將 Javascript 程式碼全部抽離,然後放到一個獨立的 Javascript 檔案裡,而且一個頁面對應一個 Javascript 檔案,不會出現 A 頁面去使用到 B 頁面的前端程式,假如有出現共用的程式,則再提取出來放在更上一層的 Javascript 檔案裡,這樣的做法就如同我們在寫後端 C# 程式一樣。

但是有很多開發者對於要將 javascript 程式碼從頁面抽離都會面臨到一個問題,那就是如何取得後端方法的路徑,在 View 頁面上可以直接使用 Url.Action() 來取得路徑,但如果是在 Javascript 檔案裡就無法使用 UrlHelper 來取得路徑,而如果是直接將路徑寫死在 Javascript 程式碼裡,就會面臨到如果網站位置、路徑有改變時所帶來的影響,另外就是有時路徑並不是如我們所想的那樣,也因為無法正確取得路徑或是難以取得正確路徑的緣故,而只能讓 javascript 程式碼繼續留在 View 頁面裡。

接下來就位各位說明如何在網站裡使用 RouteJs,讓我們可以在 Javascript 程式碼裡一樣可以使用類似 Url.Action() 的方法來取得正確的路徑。

 


2014年9月15日 星期一

ASP.NET MVC - 下拉選單的日期選擇器 @ GitHub

之前發了一連串的系列文章,雖然不是多麼厲害或是精要的內容,我還是希望大家能夠藉由這些文章來瞭解如何使用 Editor Templates 以及 Data Annotation 的應用,讓初學者或是不瞭解而亂做的人可以擺脫過往所慣用的拼裝做法,雖然如此,但是在部落格文章的瀏覽數量來看,我相當不解為何頭尾兩篇的瀏覽次數會那麼地多,而中間真正重點的 Editor Templates 的瀏覽次數卻是與頭尾兩篇不成比例的低呀,不知道是不是大家都已經知道做法,還是大家根本不想知道,因為第七篇「Validation」的內容要是沒有三四五篇的基礎也是做不出東西呀,讓我對大家瀏覽文章的行為實在是完全搞不懂呀。

我已經將這系列文章裡所使用的範例程式碼放到 GitHub 上面了,想要瞭解的朋友可以到 GitHub Repository 去瀏覽原始碼或是下載程式。

 


2014年9月12日 星期五

Visual Studio Extensions - Bing Developer Assistant

在之前的 twMVC#15 研討會由我分享的講題「開發的效能與效率」裡,其中我有分享了一個 Visual Studio 擴充功能「Bing Code Search」,這個擴充功能也是我在講課的時候都會介紹,不過這個套件的功能是蠻陽春,最主要的功能就是經由 Bing 搜尋引擎去搜尋網路上有關 Keyword 的內容,來源並不是任何的資料都抓出來,主要會是去找 MSDN 與 StackOverflow 等網站的內容,最主要目的是要作為編輯程式時的輔助功能,而不是鼓勵大家寫程式都去找網路上的資料然後複製貼上。

前不久原本 Bing Code Search 的開發團隊推出了一個新的 Visual Studio 擴充功能「Bing Developer Assistant」,這個新擴充功能就是要取代 Bing Code Search,大家可以試著去連結原本 Bing Code Search 在 Visual Studio Gallery 的連結,進去之後就會被重新導向 Bing Developer Assistant,雖然目前還是 Beta 版,但大致上的功能已經完備,至於有什麼好用以及與以往有什麼不一樣的地方呢?就繼續看下去。

 


2014年9月5日 星期五

ASP.NET MVC - 下拉選單的日期選擇器 - 年齡限制

前面七篇有關 ASP.NET MVC 的下拉選單日期選擇器已經完成了基本的功能,而現在這邊要講的是比較進階一些而且也算是另外附加的功能,有些線上的服務在做申請的時候會有年齡的限制,例如限制需要在 18 歲以上、18 ~ 65 歲之間或是不能超過 70 歲等等,ASP.NET MVC 裡的 DataAnnotation 有提供一個 RangeAttribute 類別,不過 Range 主要是針對數值型資料來進行驗證,無法針對輸入的日期資料進行驗證,所以這邊就必須要另外自行去建立一個新的 Validation Attribute 類別。

這一篇就要來說明如何讓已經完成的下拉選單日期選擇器再增加年齡限制的驗證,雖然說是年齡限制,不過也可以應用在年資、使用年限等資料的驗證。

 


2014年8月28日 星期四

Visual Studio - 使用 Twainsoft StudioStyler 快速更換 Style

在之前的幾篇文章「Visual Studio 2013 佈景主題與 Code Style」「換個好字型讓程式開發有效率」都有提到「Studio Styles」這個提供 Visual Studio Color Schema 的網站,可以讓我們從網站裡挑選適合自己並且也看得順眼的 Color Schema,藉此讓我們可以稍稍地提升編輯程式時的效率。

不過每次做 Color Schema 的更換時總是會感到不方便,還要離開 Visual Studio 然後再到 Studio Styles 裡下載 Color Schema 檔案,取得檔案之後再回到 Visual Studio 裡匯入 Color Schema 設定檔,為了要找到一個看得順眼的 Color Schema 就會這樣來來回回地好幾次,如果在 Visual Studio 裡有個工具或是介面來讓我可以快速地切患病套用各種 Color Schema 的話,這樣不是很方便嗎?

今天就看到 Visual Studio Extensions Gallery 裡新增加了一個擴充套件「Twainsoft StudioStyler」,就是這麼一個方便的套件,讓我們可以方便地檢視在 Studio Style 上面的各個 Color Schema,並且可以快速的套用,算是一個蠻不錯的工具。

 


2014年8月18日 星期一

ASP.NET MVC - 下拉選單的日期選擇器 Part.7 - Validation

前面有關下拉選單日期選擇器都講得差不多,該注意的地方甚至於不該講的都講了,但還是有個部分沒有提到,那就是資料驗證的部分,ASP.NET MVC 其中的一個特點就是資料驗證,從後端到前端的部分都有提供了功能與支援,尤其是前端與 jQuery Validation 的整合,我們在模型類別裡加註適當資料驗證的 Attribute,在前端的表單輸入就能夠做到資料驗證與錯誤訊息的顯示。

而我們到目前為止已經完成的 DateDropDownList 在資料驗證上還有什麼需要注意以及需要修改的地方呢?就看這一篇的說明。

 


2014年8月17日 星期日

ASP.NET MVC - 下拉選單的日期選擇器 Part.6 - @helper ?

前面有用了三篇在說明將下拉選單日期選擇器建立為 Editor Templates,在 ASP.NET MVC 的開發時可以有很大的彈性,不過呢…… 我卻是很少看到有人在專案裡使用,尤其是獨自學習或是在短時間囫圇吞棗般的硬學 ASP.NET MVC 的朋友。有些朋友對於 ASP.NET MVC 的學習態度是很嚴謹,但也有一些朋友會認為學習 ASP.NET MVC 不需要多久的時間,甚至有人還說出只需要兩小時的說法,學習態度嚴謹的朋友在學習上就會追根究柢、鉅細靡遺,而沒有花時間、下功夫學習的人,就只會看到 ASP.NET MVC 的皮毛而已。

而 @helper (razor helper)是個相當方便的功能,可以提供很多靈活與彈性的操作,但是好用的功能也應該用在適當的情境與場合,但如果是將這個下拉選單日期選擇器改用 razor helper 的方式來建立與使用呢?

 


2014年8月16日 星期六

ASP.NET MVC - 下拉選單的日期選擇器 Part.5 - Editor Templates

前一篇已經將一個相當陽春而且設定也不方便的 DateDropDownList 做了修改,在 Html Helper 裡透過 addtionalViewData 傳遞 DateDropDownList 的前端設定資料,如此一來在任何頁面裡都可以依據各自的需求用設定的方式來決定下拉選單日期選擇器的顯示內容。

不過前一篇的最後也提出了一個會遇到的情境,那就是假如網站裡所使用的下拉選單日期選擇器所顯示的樣式都是固定的,那麼是不是就要在每個有使用到的頁面裡,在 Html Helper 都要去加入 addtionalViewData 的設定呢?又或者就乾脆放棄 Part.4 的方法而直接使用 Part.3 的方法,然後再去 site.js 裡面直接去增加各種不同使用情境的顯示設定。

其實每一種作法都是可行的,不管是麻煩的、強調彈性的或是只想要簡單的,每種作法都有其適合的情境,不過還是強調一點,盡可能去尋找出最大的可能性,總是會有方法的。

 


2014年8月15日 星期五

ASP.NET MVC - 下拉選單的日期選擇器 Part.4 - Editor Templates

上一篇已經說明將下拉選單日期選擇器給做成 Editor Templates 的方式在 ASP.NET MVC 裡使用,但是上一篇所說明的只是基本的應用,所以有很多地方缺乏了彈性,在實際專案的應用將會有很多的困難,於是這一篇我們繼續將這個下拉選單日期選擇器的 Editor Templates 給加以改善。

 


2014年8月14日 星期四

ASP.NET MVC - 下拉選單的日期選擇器 Part.3 - Editor Templates

第一篇「ASP.NET MVC - 下拉選單的日期選擇器 Part.1」建立了由前端處理的下拉選單日期產生器,說明了基本的使用與可以顯示民國年以及其他一些的設定。

第二篇「ASP.NET MVC - 下拉選單的日期選擇器 Part.2」則是進一步說明如何在 ASP.NET MVC 網站裡做整合使用,除了一般的建立表單裡的使用,也有說明如何在編輯表單裡設定既有的日期讓下拉選單日期選擇器去做顯示。

這一篇就來說明怎麼將這個下拉選單日期選擇器改為 Editor Templates 來使用,在 ASP.NET MVC 的開發裡,使用 Editor Templates 會有很大的彈性與可維護性,與第二篇所採用頁面裡「組裝」的方式相比之下,我會建議各位使用 Editor Templates,就來看看要如何製作這個下拉選單日期選擇器的 Editor Templates。

 


2014年8月13日 星期三

ASP.NET MVC - 下拉選單的日期選擇器 Part.2

上一篇「ASP.NET MVC - 下拉選單的日期選擇器 Part.1」裡已經完成了前端功能,並且也可以正常的運作,如果要把這個下拉選單的日期選擇器與 ASP.NET MVC 做整合使用的話,有很多種方式可以達成,這一篇就先來說明基本的使用方式。


2014年8月12日 星期二

ASP.NET MVC - 下拉選單的日期選擇器 Part.1

以往都會一直強調在表單的日期輸入應該要使用日期選擇器(DatePicker),而避免直接使用一般的文字輸入框來讓使用者直接輸入日期,為了要避免輸入格式的紊亂之外,最重要的還是要確保使用者所輸入的日期是正確的,例如現在常常會看到許多人使用的「bootstrap-datepicker」,或者是在以前有曾經介紹過的「My97 DatePicker」,雖然說 Chrome 有支援 HTML 5 的日期格式,讓使用者輸入日期時就有 DatePicker 可以讓使用者使用,不過目前大部分的瀏覽器還沒有提供支援。

image

如果客戶不希望使用 DatePicker ,而是想要使用下拉選單來選擇年月日的方式輸入日期的話,也是可以的,這並非難事,有些人會選擇自己做,而也有很多人會直接到網路上尋找是否有符合功能需求的現有 jQuery Plugins。

這篇就來說明如何在 ASP.NET MVC 的專案裡去使用下拉選單的日期選擇器,另外也可以將年份選則由西元年改以民國年來顯示。

 


2014年8月7日 星期四

讓 Debugging 的時候也可以隨著組態轉換 Web.Config

這一篇的題目跟前一篇「發佈網站時依據組態設定的不同而轉換 Web.Config」相當相似,不過要達成的結果卻是不一樣的,前一篇所講的是在發佈網站時,可以事先透過增加組態設定然後新增相對應的 Web.Config 檔案,然後在發佈網站就可以選擇不同組態而轉換 Web.Config 的內容。

原本要寫的是各位看到的這一篇,但是之前並沒有文章交代有關發佈網站並選組態轉換 Web.Config 的主題,必須要先有前一篇的基礎之後才能夠完成這一篇,不然兩篇的內容寫在一塊,我想現在也很少人會花時間去看一篇冗長的文章了。

這一篇要講的就是我們在 Visua Studio 開發網站時,我們也有增加組態並且編輯相對應 Web.Config 的轉換設定內容,但是當進入偵錯模式的時候卻無法隨著組態選擇的不同而讓偵錯模式下的網站也能有所轉換,因為預設的組態轉換 Web.Config 是只有在發佈網站的時候才有作用,這一篇就是要來說明如何讓我們在偵錯模式下也可以隨著選擇不同的組態而轉換當下的 Web.Config。

 


發佈網站時依據組態設定的不同而轉換 Web.Config

在一般開發專案的時候,我們會在組態對應的 Config 檔案裡添加在發佈時需要至換的設定值,這樣的轉換常常會用在資料庫連接字串的轉換,如果對於組態轉換 Web.Config 設定的操作不熟悉或是沒有這麼做的朋友,可以詳讀以下連結的 ASP.NET 官網教學文章,

ASP.NET Web Deployment using Visual Studio: Web.config File Transformations | The ASP.NET Site

這一篇就來看看如何讓我們在發佈網站的時候能依照選擇組態的不同,而轉換 Web.Config 的內容。

 


2014年8月6日 星期三

Visual Studio 2013 遇到「無法初始化 PowerShell 主機 ….. 設為 AllSigned」問題

近幾個月來在使用 Visual Studio 2013 新建立 ASP.NET MVC 專案的時候總是常常會遇到這樣的問題,

SNAGHTML17ec2b1

SNAGHTML1917764

「無法初始化 PowerShell 主機,如果您的 PowerShell 執行原則設定設為 AllSigned,開啟 Package Manager Console 以便先初始化主機」

看了網路上的許多文章及嘗試各種正規的解決方法都還是沒有任何的改變,而且這樣的狀況在我沒有重新安裝電腦作業系統前就已經遇到過,那個時候還沒有將 VS2013 安裝 Update 2,就算是裝了 Update 2 之後,這問題依然存在,時至今日剛好 VS2013 Update 3 發佈也安裝了,還是一樣出現這個問題。

 


2014年8月4日 星期一

換個好字型讓程式開發有效率

之前在 twMVC #15 所講的主題是「開發的效能與效率」,其中說明了很多有關如何讓我們的開發效率有所提升的方法,當然這些提供給各位的方法其實是見仁見智,最主要的還是需要開發者能夠多瞭解開發工具「Visual Studio」並且將其調整到最適合我們開發的狀態,這麼一來就可以達到提高開發效率之目的,

開發的效能與效率 - twMVC#15

而在這一次的研討會裡我沒有說到的內容就是「字型」,這個部分在 ASP.NET MVC 的課程裡一定會提到,講得直白一點就是「好的字型讓我們開發效率上天堂,不好的字型讓我們寫 Code 眼睛會脫窗」,因為當我要使用別人的電腦去解決他們的問題時,一看到 Visual Studio 仍舊使用預設的「細明體」我就會很難受,如果時間允許而且他們同意的話,我都會多事地幫他們更換字型,至少在找尋程式問題的時候可以讓眼睛舒服一點,而且可以明確的辨別出「字」。

之所以會寫這一篇,主要是看了這一篇文章「適合程式設計師編寫程式的免費等寬字型(Monospaced Font)整理 | G. T. Wang」,當然裡面的字型並非都適合 Visual Studio 也不是都適合每個程式開發人員,但是開發者每天面對數量龐大而且密密麻麻的程式碼,如何舒服地閱讀就是值得關注的重點,而要讓我們可以舒服地閱讀並且有效率的編輯程式,就是要從選擇好的字型開始。

 


2014年7月30日 星期三

使用 Sample Browser 尋找範例專案

在 Visual Studio 2012 (VS2010) 裡有一個 Extensions (擴充功能)「Sample Browser」,讓我們可以方便地尋找相關的範例專案,不過到了 Visual Studio 2013 之後「Smaple Browser」並未順勢推出相對應的版本,不過還是可以從不同的地方來尋找範例專案。

 


2014年7月24日 星期四

新自然輸入法 demoshop 特別版

打從接觸電腦之後,我沒有使用過其他的輸入方式,倉頡、行列、嘸蝦米等等,我都沒有用過,一直以來都是使用注音來輸入中文,早期就有使用過自然輸入法,而後 Yahoo 輸入法出現之後就盤據在我的電腦中長達好幾年,直到 Yahoo 不再開發維護 Yahoo 輸入法,電腦作業系統更換到 Window 8.1 之後,就一直沒有找到一個比較合適的注音輸入法。

也許你會說,Windows 作業系統不是就有內建的注音輸入法與新注音輸入法嗎?

老實說,我一直都認為微軟的注音輸入法真的是在開玩笑,很不好用,而且我很根深蒂固的認為,台灣出現的注音文現象,其元兇就是新注音輸入法,所以我幾乎不使用內建的注音輸入法,除了是剛安裝好機器沒得選擇才會去用,就像剛裝好作業系統之後,第一件事情就是開啟 IE 然後下載 Firfox 與 Chrome 一樣。

支援 Windows 8 的新自然輸入法剛出來的時候就有去使用,但卻不太好用,三不五時會出現程式當掉的現象,再來就是一直頻繁出現的廣告讓我抓狂,於是最後我就選擇使用新酷音輸入法,雖然陽春但至少堪用,而且也可以在 Windows RT 的介面下使用。

最近,demo 給了我一個特別版本的新自然輸入法,這個版本與新自然官方網站的免費版本不一樣,雖然功能與付費版本有差異,但是比免費版本提供了更多的功能,就來看看有什麼不一樣。

 


2014年7月18日 星期五

Console Application 使用 Entity Framework Code-First

我一般在練習 Entity Framework 操作時不管是 Database-First 或 Code-First 都是直接建立一個新的 ASP.NET MVC 專案來使用,而如果要換成 Console Application(主控台應用程式)時,在 Database-First 使用情境下與一般使用 ASP.NET MVC 專案並沒有什麼太大的差異,不過要是換成使用 Code-First 的時候就會有很大的差異。

這篇就簡單紀錄在 Console Application 專案裡使用 Entity Framework Code-First 的操作。

 


2014年7月14日 星期一

練習題 - ASP.NET MVC 動態新增輸入框然後在後端以 FormCollection 取得資料

在課堂上介紹到在 View 所輸入的表單資料也能夠使用 FormCollection 取得輸入的資料,尤其是在前端頁面有動態新增文字輸入框的情況下,使用 FormCollection 來取資料會相當適合,因為不知道前端會增加多少個文字輸入框,所以後端也就不知道該取得多少資料。

以往的文章也都沒有寫過類似的內容,所以就把這個情境當做一個練習題。

 


2014年7月9日 星期三

.NET Fiddle Chrome Ext with MSDN LINQ Sample

在「使用 .NET Fiddle 來練習 LINQ 語法操作」這一篇為大家說明可以使用 .NET Fiddle 來練習 LINQ,然後「.NET Fiddle Chrome Extension with MSDN Sample Code」這一篇則是向大家說明可以使用 .NET Fiddle 所提供的 Chrome Extension,使用 Chrome 瀏覽器到 MSDN Library 裡看到 Smaple Code 時就使用擴充功能讓指定的 Smaple Code 馬上(要等個幾秒)轉為 .NET Fiddle Embed 並且執行然後顯示結果,甚至可以在 Embed 裡進行編輯與改寫程式,真正達到練習的效果。

既然可以這麼做,那麼也可以利用 MSDN Library 裡面所提供的 LINQ Sample Code 來做為 LINQ 入門學習的練習,這一篇就稍微整理了 MSDN 裡面有關 LINQ 的相關類別與方法說明,都是包含有 Sample Code,這樣就可以使用 .NET Fiddle Chrome Ext 來跟著實際動手做練習。

 


2014年7月8日 星期二

.NET Fiddle Chrome Extension with MSDN Sample Code

上一篇「使用 .NET Fiddle 來練習 LINQ 語法操作」是向大家說明可以使用 .NET Fiddle 來作為 LINQ 入門新手的練習工具(不過我還是最推薦使用 LINQPad),不過有時候練習還是會不知道怎麼下語法、寫程式,而絕大部分的範例都是可以從 MSDN 上面取得,而 .NET Fiddle 有提供 Chrome 擴充功能工具,只要我們的 Chrome 有安裝這個 Extensions 之後,在瀏覽 MSDN 時,只要看到有 Sample Code 就可以即時執行然後看到結果,是不是很方便呢?

就來看看怎麼使用吧!

 


2014年7月7日 星期一

使用 .NET Fiddle 來練習 LINQ 語法操作

在介紹 LINQ 的時候,我一定會推薦大家可以使用 LINQPad 來做為練習的工具,我也有多篇文章是在說明如何使用 LINQPad,

LINQPad - 好用到爆炸、.NET開發人員必備的好用工具
Oracle ODAC 11.2 Release 4 (11.2.0.3.0) - Includes support for Entity Framework and LINQ
LINQPad + Oracle ODAC for Entity Framework
看看 LINQPad ( v2.41.2 / v4.41.2 ) 更新了什麼
LINQPad v4.42.05 Beta 介紹
LINQPad - IQ Driver - for MySQL, SQLite, Oracle
LINQ 與 Access - 使用 LINQPad

LINQPad 有免費版也有付費版本,免費版就已經相當好用,而且有絕大部分的主要功能,所以一直推薦大家要練習或測試 LINQ 操作的時候可以使用 LINQPad,但是對於 LINQ 入門新手來說,基本的 LINQ 方法不是很熟悉,更何況是比較進階一些的操作,而 LINQPad 免費版與付費版最大的一個差異就是「Intellisense」,對於新手來說,有「Intellisense」總是比較方便一些,所以我一直鼓勵 LINQ 入門新手使用 LINQPad 來練習,但是沒有 Intellisense 的情況下,新手用個幾次之後還是寧願開啟 Visual Studio 來練習。

前一陣子開始會使用線上工具「.NET Fiddle」,部落格裡也有文章用了 .NET Fiddle 將程式實作與結果即時顯示給大家,而且在 .NET Fiddle 裡面編輯程式的時候還會顯示方法提示,於是這就讓我想到,.NET Fiddle 也是個相當適合 LINQ 入門新手用來練習 LINQ 操作的一個好工具。

 


2014年7月4日 星期五

ASP.NET MVC 5.2 New Feature - optgroup in DropDownList with SelectListItem

上一篇「ASP.NET MVC 5.2 New Feature - Support HTML optgroup in DropDownList」介紹在 ASP.NET MVC 5.2 所新增加的功能 optgroup in DropDownList,另外也介紹了怎麼在 ASP.NET MVC 5.1.2 版本的網站裡安裝套件的方式來完成 optgroup in DropDownList 的功能需求。

上一篇裡面是使用 SelectList 來做說明,但如果想要使用 SeletListItem 的話,應該怎麼做呢?這一篇就來告訴你(事情並沒有想像中的簡單哩)。

 


2014年7月3日 星期四

ASP.NET MVC 5.2 New Feature - Support HTML optgroup in DropDownList

ASP.NET MVC 5.2 在日前 ( 2014-07-02 ) 已經正式發佈,現在的更新頻率已經是越來越頻繁,經過這兩年更新的狀況之後,相信各位應該已經習慣並且熟悉這樣的更新頻率,現在的更新已經不是四五年前那樣要隔個一年或是更久才會有一次的更新,現在的更新大概每幾個月就會有一次,連 Visual Studio 2013 的 Update 3 都已經 RC 囉,相信 Update 3 的 Release 應該是快了。

我不想對每個更新或是新增的功能來做說明,詳細的內容可以查看官網的文章內容:
What's New in ASP.NET MVC 5.2 | The ASP.NET Site
What's New in ASP.NET Web API 2.2 | The ASP.NET Site
What's New in ASP.NET Web Pages 3.2 | The ASP.NET Site

這一篇文章將會針對這次 MVC 5.2 的更新「Support HTML optgroup in DropDownList」來做介紹。

 


2014年6月29日 星期日

ASP.NET MVC Excel 匯入與匯出 - 簡單做 @ GitHub

將前三篇有關「ASP.NET MVC Excel 匯入與匯出 - 簡單做」的範例程式碼給放到 GitHub 上面,有興趣的朋友可以直接上去看或是下載完整程式碼。

另外說明如果把範例程式的網站給發佈到 Windows Server 時,一些需要注意的地方。


2014年6月28日 星期六

Visual Studio 擴充功能 - Bootstraps Snippet Pack

從 Visual Studio 2013 將 ASP.NET MVC 5 與 ASP.NET WebForms 的預設範本使用 Twitter Bootstrap 之後,這個原本就已經被許多網站開發人員所採用的前端 UI Framework 也讓更多的 ASP.NET 開發人員認識並使用它,這對於大多數的 ASP.NET WebForms 的開發人員會感覺有比較大的改變,因為平時所接觸的 UI 都是以 Server Controls 居多,對於 ASP.NET MVC 開發人員來說,使用 Bootstrap 來開發是比 WebForms 的人還早,而且也比較熟悉,畢竟 ASP.NET MVC 沒有那些可以拖拉放的 Server Control。

但使用 Bootstrap 時,不見得會把所有的標籤語法給記起來,當需要某些功能的時候才會到官網去找,或是到 Bootsnipp 或是 Bootply 等網站去找,不過最近有一個 Visual Studio 擴充功能剛好可以解決這項困擾,只要安裝好 Extension 之後,在開發的時候只要使用 code snippet 就可以快速產出 Bootstrap 的功能。

 


2014年6月27日 星期五

ASP.NET MVC 匯出 Excel 簡單做 - 使用 ClosedXML

經歷了前兩篇的「匯入 Excel 簡單做」之後,有了匯入就會有匯出的功能,匯出 Excel 的功能可以使用很多方式來完成,例如直接使用 Open XML SDK、NPOI、EPPlus 或是一些需付費的第三方套件,這邊我會建議,如果專案預算允許的情況下,在穩定性以及日後維護的考量,可以考慮購買需付費的第三方套件。

這一篇文章的範例會延續前兩篇匯入 Excel 的內容,所以建議各位先看過這兩篇文章:

ASP.NET MVC 匯入 Excel 簡單做 - Part.1 檔案上傳

ASP.NET MVC 匯入 Excel 簡單做 - Part.2 匯入資料

 


2014年6月26日 星期四

ASP.NET MVC 匯入 Excel 簡單做 - Part.2 匯入資料

上一篇完成了 Excel 的檔案上傳功能,那接下來要處理的就是已上傳 Excel 檔案的資料匯入,其實整個操作的流程會是檔案上傳完成後就直接進行 Excel 資料的匯入,我們就來完成這些功能吧。

 


ASP.NET MVC 匯入 Excel 簡單做 - Part.1 檔案上傳

做專案開發的時候常常會碰到這樣需求,就是 Excel 檔案的匯入與匯出,而做法的難易度與複雜度都會因為所要處理的匯出入資料格式與內容而異,所以在市場上就有許多的套件與解決方案,功能強大而且支援多樣性與客製化處理與操作的套件往往需要很高的授權費用,不過一分錢一分貨,但是唯有一句話永遠是真理……「免費的最貴」。

因為不想花錢買第三方套件來解決,所以就用土法煉鋼的方式來兜出一個解決方法,通常都要耗費相當多的時間,而且很多方法都是 Google Copy Paste 而來的,所以就會常常出現問題。

那麼這一篇也是一樣,看來也會是讓人 Google Copy Paste 的一篇文章,不過這一篇只會提供簡單做法的解決方式,針對單一個 Excel 檔案的單一 WorkSheet,然後匯入單一的 Table 裡,希望大家能夠了解做一個 Excel 匯入功能的基本流程與方法。

 


2014年6月23日 星期一

ASP.NET MVC 5 with CheckboxList 應用範例

前一陣子完成了「ASP.NET MVC - CheckBoxList 與 ValidationMessage (ASP.NET MVC 5 with Bootstrap3)」與「ASP.NET MVC - CheckBoxList 與 ValidationMessage (ASP.NET MVC 4 without Bootstrap)」這兩篇有關於 CheckBoxList 與 ASP.NET MVC ValidationMessage 的應用,但這兩篇文章與之前有關 CheckBoxList 的文章都只有展示 CheckBoxList 的功能,並沒有實際針對在資料的 CRUD(Create, Read, Update, Delete)操作上去怎麼使用,所以這一篇文章就來說明怎麼在資料的 CRUD 操作去使用 CheckBoxList。

 


2014年6月19日 星期四

雜談… 留與不留

「為了留住人才,需要讓他們感到自身是有價值的,如果他們不這麼認為,那就很容易出問題」

今天在臉書上看到這樣一句話,相當有感觸,也為之前一個專案的結束並且離開一個環境來做個整理。


範例程式 @ GitHub - ASP.NET MVC and ASP.NET WebForms with MiniProfiler and Glimpse

針對前幾天發布的幾篇文章,將文章的範例程式做整理然後放到 GitHub 上,因為有些朋友看了文章之後還是不太有感覺,不曉得是我文章的內容描述有問題還是文筆不好,所以就會有人反應看了文章之後也跟著做一遍卻發生問題,所以將範例程式放到 GitHub,這樣大家就可以直接下載然後執行。

 


Glimpse + ASP.NET WebForms + ADO.NET

前一篇「MiniProfiler 3 + ASP.NET WebForms + ADO.NET」是說明怎麼在 ASP.NET WebForms 與 ADO.NET 的情況下去怎麼使用 MiniProfiler 以及如何修改設定,同樣的在 twMVC#15 裡也有分享另一個套件「Glimpse」。

與 MiniProfiler 比較起來,Glimpse 不止是提供 EF 的 SQL Command 追蹤或執行方法的效能追蹤,此外還有提供多種的頁面訊息,讓我們在開發時可以掌握更多的資訊,這些在以前的文章都曾經有介紹過,可以查看部落格裡的 Glimpse 相關文章

之前的文章都是以 ASP.NET MVC + Entity Framework 的情況下來做說明,而 Glimpse 在 1.7.0 版之後也發布了對於 ASP.NET WebForms 的支援,而 Glimpse.WebForms 可以說是原本 ASP.NET Trace 功能的進階加強版,所能提供的資訊與內容是更多樣且更為清晰。

但是在使用 ASP.NET WebForms + ADO.NET 的情況下,如果使用 Glimpse 而沒有經過任何調整的處理,那麼在 SQL Tab 是不會有任何作用與資訊,所以這一篇就來說明要怎麼調整讓 Glimpse 的 SQL Tab 可以顯示頁面執行 ADO.NET 存取資料的 SQL Command 內容。

 


2014年6月18日 星期三

MiniProfiler 3 + ASP.NET WebForms + ADO.NET

twMVC #15 的這一場研討會裡,我主講「開發的效能與效率」這一個主題,裡面所提到的 MiniProfiler 是我一直相當推薦給大家在開發的時候來使用,除了 ASP.NET MVC with Entity Framework 的專案可使用之外,甚至是 ASP.NET WebForms with Entity Framework 的專案也一樣可以使用,但如果在資料存取並非使用 Entity Framework  而是使用傳統的 ADO.NET 時應該怎麼設定與修改呢?

在這一篇裡將會以 ASP.NET WebForms + ADO.NET + MiniProfiler 3 的使用情境做使用與設定的說明。


LINQ 工具 - devart LINQ Insight

LINQ Insight 這個工具在 2012 年發布之後就已經有在關注,只不過一開始的功能並不是很好用,而且沒有讓我感覺到能帶給我在開發上有任何太大的幫助,所以最後就沒有用在開發上。

不久前閒晃到 devart 網站,我一直有使用 SQL Complete 與 Code Compare 這兩個工具,所以有時會上去下載新版的更新檔案,然後就發現到 LINQ Insight 已經更新到 3.2 版,而且介面與功能有了一些改變,於是就下載試用版來試試看,在試用過之後,雖然 LINQ Insight 還是有部份功能無法達成的情況,但整體來說是個不錯的輔助開發工具,這邊就向大家做個簡單的介紹。

 


2014年6月17日 星期二

ASP.NET MVC 5 + Entity Framework 6 + MiniProfiler 3

MiniProfiler 在今年四月發佈了 3.0 的版本,不過新版本還不太穩定,一直到了這個月所發佈的 3.1.0 這個版本才算穩定,而 3.x 與之前的版本在設定上有些差異,並不是變得比較複雜,反而是更為簡單,而且因應不同 EF 版本與不同的資料存取,在設定上會有所不同,哪些版本應該做什麼樣的設定,在 MiniProfiler 的官網上都有做說明,所以只要照著官網上的說明就可以了。

在 2014-06-14 所舉辦的 twMVC #15 研討會,我所主講的內容裡就有說明 MiniProfiler 的使用,那麼在這裡使用文字與圖片的方式做個簡單的說明。

 


2014年6月16日 星期一

訓練課程 - ASP.NET MVC 5 實戰訓練營 SkillTree.My

在去年 twMVC 有辦過一場 WorkShop 實戰營,當時是以 ASP.NET MVC 4 與使用 Visual Studio 2012 來做為課程的開發內容,時至今日,ASP.NET MVC 也已經發展到了 5.1.2,而 Visual Studio 2013 也是進入 Update 2,現在技術以及開發工具的發展越來越快,前不久的 Tech Ed North America 2014 也發表了 ASP.NET vNext 的內容,新的 ASP.NET 已經不再是你我所熟悉的那樣,新的 ASP.NET MVC 6 也有了不同的樣貌,不過別緊張,要到那一個階段還有一段時間,所以千萬別慌張。

這邊向各位介紹一門課程,讓想要跨入學習 ASP.NET MVC 技術的朋友藉由課程的引導,以循序漸進方式來學習 ASP.NET MVC 的開發。

skilltree2


2014年6月4日 星期三

基本題 - C# 西元年轉換民國年,能直接使用 source.Year - 1911 嗎?

前面幾篇有講到西元年轉換民國年格式字串的內容,因為我是使用 TaiwanCalendar 類別之後, 然後年份的地分直接使用 taiwanCalendar.GetYear(source) 的方式來取得,但這個地方的處理不能直接使用 source.Year - 1911 嗎?

當然你可以這麼用,而且你要清楚知道這麼用的原因,而且要確保開發團隊的成員都知道這麼做的原因,甚至於你也要確保日後接手維護的開發人員也能夠知道,不然哪天出現一個天真純潔的開發人員看到這樣的程式,就會想說為何不用 source.AddYears(-1911) 來處理呢?程式不是更加簡潔、漂亮嗎?當出現這樣的狀況時,抓蟲、找問題又將會是一場令人惱怒的過程。

 


基本題 - C# 西元年轉換取得民國年格式字串

在台灣使用 .NET Framework C# 的開發人員對於這樣的轉換都應該內化為基本操作知識,也就是當有西元年轉為民國年的需求時,都要能夠馬上使用正確的方式來取得正確的資料內容,而並不是直接使用減去 1911 的方式來結案。

為什麼呢?

你使用任何一個閏年(台灣每次總統大選年、夏季奧運舉辦年、美國總統就職的那一年)去取得 2 月 29 日,然後直接用減去 1911 的方式來看結果,我想大部分的人就會知道答案了,如果你還是不懂,那就繼續看下去。

 


2014年6月1日 星期日

AutoMapper Custom Value Resolvers 的應用 - 指定個別日期型別屬性轉換為民國年格式

在上一篇「AutoMapper Custom Type Converters 的應用 - 將所有日期資料轉換為民國年格式」為各位說明了怎麼將取出資料裡的西元年日期型別資料使用 Custom Type Converter 轉換為民國年格式字串,因為是使用了 Type Converter 所以會統一處理指定型別的轉換,那如果我們不想要統一處理而是想要指定某個欄位做轉換,而其他的日期欄位不需要做轉換,這樣的情況就可以使用 Custom Value Resolvers 來做處理。

之前曾經寫過一篇文章說明 Custom Value Resolvers「AutoMapper - Complex Type 使用 Custom value resolvers 設定屬性轉換」,不過使用的情況與這一次的要說明的並不相同。

 


2014年5月31日 星期六

AutoMapper Custom Type Converters 的應用 - 將所有日期資料轉換為民國年格式

在做資料對映轉換的時候,假如想要將來源物件的某一種類型的資料一致轉換為另一種類型時,這個時候可以使用 Custom Type Converter,可以讓對映轉換的設定減少重複的程式碼。

這篇就用一個最容易明白的例子來做說明,就是將原本存為西元年的日期資料使用 Custom Type Converter,統一讓西元年的日期資料轉換為民國年格式的字串資料。

 


2014年5月30日 星期五

在 Visual Stuidio 2012 開發 ASP.NET MVC 5 專案

當 Visual Studio 2013 出來之後,我手上的專案大多數當已經轉到 VS2013 裡進行開發,反而 VS2012 就很少會開啟,除了下載一些 OpenSource 或範例專案會使用 VS2012 開啟,所以我不曾在 VS2012 裡去建立 ASP.NET MVC 5 的專案,今天有人向我問起這個問題,當下我是愣了一下,因為不曾這樣作過,所以這一篇就來說明怎麼在 VS2012 下建立 ASP.NET MVC 5 專案。

 


2014年5月19日 星期一

ASP.NET MVC - CheckBoxList 與 ValidationMessage (ASP.NET MVC 4 without Bootstrap)

上一篇「ASP.NET MVC - CheckBoxList 與 ValidationMessage (ASP.NET MVC 5 with Bootstrap3)」的說明是使用 Visual Studio 2013, ASP.NET MVC 5, Bootstrap 環境下所開發的,然而如果是使用 ASP.NET MVC 4 並且沒有使用 Bootstrap 的情況下又該如何操作呢?

 


2014年5月13日 星期二

ASP.NET MVC - CheckBoxList 與 ValidationMessage (ASP.NET MVC 5 with Bootstrap3)

在上個月,有位網友在一篇文章下面寫了這樣的留言,留言的文章是「ASP.NET MVC - 修改 CheckBoxList、增加 RadioButtonList」,

image

因為從四月一直到五月初,我都一直在瘋狂忙碌的狀態,除了幾篇簡短的練習題文章之外,我實在抽不出時間來好好研究這個問題,所以一直延宕到現在才有時間來研究一下這個問題。

這篇文章就來跟大家說明怎麼讓 CheckBoxList 也可以有 Validation 的功能。

 


2014年4月25日 星期五

練習題 - LINQ Multi Columns Dynamic Group

前一篇文章「練習題 - LINQ Single Column Dynamic Group」練習了各種動態單一欄位的 Group 操作,這一篇則是要來練習動態多欄位的 Group 操作。

使用環境:VS2013, ASP.NET MVC 5, EntityFramework 6.1.0

使用資料庫:Northwind


2014年4月22日 星期二

練習題 - LINQ Single Column Dynamic Group

這一次要練習的題目是怎麼作到動態選擇欄位做 LINQ 的 Group 操作,其實很少遇到需要在 LINQ 裡做動態 Group 的需求,所以就當做練習題目來練練看。

使用環境:VS2013, ASP.NET MVC 5, EntityFramework 6.1.0

使用資料庫:Northwind


2014年4月20日 星期日

練習題 - LINQ Contains 操作與 ArrayList

很少在程式裡使用到 ArrayList 這個類別,所以一時間還沒有馬上意會過來,所以查了一下 MSDN 上面的說明:

MSDN - ArrayList 類別 (System.Collections)

這個類別有實作 IList 介面,而且使用大小會視需要而動態增加的陣列。

但如果我們要操作一段 LINQ 查詢,所使用的條件值是 ArrayList 而且輸出的結果也需要是 ArrayList 時,應該怎麼處理呢?

就來練習看看吧!


2014年4月17日 星期四

ADO.NET DataSet 對映轉換為型別 - 使用 AutoMapper

以往我們要把使用 ADO.NET 操作所取得的資料 Mapping 到自訂的類別時,往往都會用到蠻多累人的作法,對於這樣需求的開發者通常都是直接將每一筆資料用手動的方式把一個個欄位對映到類別的屬性,而這件事情做個幾次之後就會覺得煩,所以開發者就會四處找答案,而大部分所找到的解決方案就是使用反射(Reflection),不過要使用反射做這件事情也不見得簡單,而且要靠考慮的事情也相當多,往往要碰到無數個錯誤之後才能夠讓程式穩定,但是例外總是會層出不窮地出現,所以最後總是無限循環地作修改。

其實可以使用 AutoMapper 來處理這樣的操作,而且沒有太複雜與繁瑣的步驟。

 


2014年3月19日 星期三

LINQ 與 Access - ASP.NET MVC 專案使用 LINQ to Access 的 LinqToDB.Templates

前面的文章介紹了 Linq To Access 這個套件,但並非使用它所提供的 T4 Templates 來建立 Data Context,而這一篇文章裡將會以 ASP.NET MVC 專案裡如何使用 LinqToDB.Templates 來做說明。

 


2014年3月18日 星期二

LINQ 與 Access - 使用 LINQ to Access

習慣使用 Entity Framework 之後,幾乎專案的開發都不會使用其他的資料存取方式,而之前的文章說過 Entity Framework 並不支援 Access,所以才會使用 Typed DataSet 來存取 Access,但還是覺得一定有什麼方式是近似於我平常習慣的開發方式,後來我找到了 LINQ to Access 這個套件,而且使用起來還算簡單,畢竟使用 Access 作為資料儲存媒體的專案並不會有太複雜的操作,可以做為解決方案,而且其底層 LINQ to DB 還有實做各種資料庫的 Data Provider,大家有時間的話可以玩玩看。

P.S.
LINQ to Access 與 LINQ to SQL 或是 ADO.NET Entity Framework 並沒有直接關係,所以不要以為 LINQ to Access 是 LINQ to SQL 或 EntityFramework 的擴充,與 Oracle ODAC for EntityFramework  之於 EF 是不一樣。

 


2014年3月17日 星期一

LINQ 與 Access - 使用 LINQPad

我一直都推薦 LINQPad 做為練習或是開發測試 LINQ 的工具,因為不必開啟 Visual Studio,也不必在 Visual Studio 寫完 LINQ Expression 之後按下「F5」開始偵錯後才能看到剛才寫的 LINQ Expression 是否正確或是是否取得預期結果。

但是我們可以在 LINQPad 裡對資料來源為 Access 做 LINQ 操作嗎?

 


2014年3月16日 星期日

LINQ 與 Access - 使用 Typed DataSet

怎麼在專案裡對 Access 為來源的資料使用 LINQ 操作呢?

Entity Framework 與 LINQ to SQL 不支援 Access,Telerik Data Access (之前叫做 Open Access ORM) 也不支援,如果不尋求 Third Party 支援的話,其實還是可以使用強型別 DataSet (資料集),強型別 DataSet 就可以直接將 Access 裡的 Table 拉進去使用,不過我很少使用 Typed DataSet,所以我還是希望可以有其他的方式來解決,不過這一篇就當作練習,練習怎麼使用 Typed DataSet。

 


2014年3月6日 星期四

AutoMapper - 使用 Queryable Extensions

AutoMapper 對於有實作 IQueryable<T>(例如:使用 Entity Framework, NHiberbate 等)提供了另一個資料對映的方式,可以簡化資料對映的處理。

 


2014年3月4日 星期二

AutoMapper - Complex Type 使用 Custom value resolvers 設定屬性轉換

在上一篇文章「AutoMapper - Complex Type 的資料對映」裡說明了幾種對於 Complex Type 的資料對映方式,其實還有一種方式,AutoMapper 提供了一種「Custom value resolvers(自定義值解析器)」,讓我們可以另外定義資料解析以及轉換的方式,以彈性的方式進行目標類別物件的資料對映。

這篇文章將會以前篇文章的程式來做示範。

 


2014年3月2日 星期日

AutoMapper - Complex Type 的資料對映

有時候建立類別並不會單純只使用一般的資料型別來定義屬性,很多時候也是會使用我們所定義的類別作為屬性的型別,最常見的就是在 ASP.NET MVC 所使用的 ViewModel 或是 DTO 資料傳輸物件類別,要如何處理這樣的資料對映呢?

接下來將會說明不同的資料對映使用方式。

 


2014年3月1日 星期六

AutoMapper 兩個物件對映到一個類別

之前的兩篇文章或是一般的應用都是取得某個類別的一個物件後再去對映到目標類別物件,

使用 AutoMapper 處理類別之間的對映轉換

AutoMapper 的設定 (Configuration)

如果要將兩個以上的物件對映到目標類別,應該怎麼做呢?

 


2014年2月18日 星期二

ASP.NET MVC - 移除特定的 Response Headers 內容

在預設的狀態下網頁輸出到 Client 端都會在 Response Header 裡輸出一些資訊,而 ASP.NET MVC 網頁所預設輸出的內容如下:

image

在 Response Header 裡就包含了 Server, X-AspNet-Version, X-AspNetMvc-Version, X-Powered-By 等資訊,在資訊安全的角度來看,這些資訊沒有必要對外透露,透露越多就增加越多的風險,所以這些訊息就有必要在網頁輸出時就要做移除,這篇文章將會說明怎麼做。

 


2014年1月7日 星期二

觀察 PagedList.Mvc + ASP.NET MVC 5 + EF6 的執行效能 - 使用 Glimpse.EF

上一篇文章說明了使用 EF6 的 Intercepting 與 NLog 來紀錄觀察分頁的執行內容與效能,在文末也提到 MiniProfiler 與 Clutch.Diagnostics.EntityFramework 目前尚未支援 EF6,如果不想使用 EF6 Intercepting 的話,其實還可以使用 Glimpse.EF 來觀察,Glimpse 在兩年多前也曾經寫文章介紹過,但可能當時界面與功能還蠻陽春,所以注意的人不是很多(文章的瀏覽數量都少少的),不過在去年開始進行了界面的改版而且版本更新進度也變得頻繁(因為 redgate 投入支援),另外也因為有提供介面讓開發者可以開發其他功能,所以有許多相當實用的功能可以使用,而且不限定 ASP.NET MVC 才能使用,提供 ASP.NET WebForm 的功能也相當豐富與使用,有興趣的朋友可以玩玩看。

這一篇就來介紹怎麼使用 Glimpse 與 Glimpse.EF 來觀察分頁的執行。

 


2014年1月6日 星期一

觀察 PagedList.Mvc + ASP.NET MVC 5 + EF 6 的執行效能

這陣子有網友詢問為何使用 PagedList.Mvc 所執行的效能為何會相當緩慢,而在看過程式碼後並未發現到有做任何特殊的處理或複雜的操作,就只是從 DbContext 將資料取出後再使用 ToPagedList() 方法取得分頁資料,另外我也曾建議他可以使用 LINQPad 去做單純的 EF 取得資料的觀察,這麼做是要將資料存取的環境給單純化,排除 ASP.NET MVC 環境的影響,而這位朋友回報說在 LINQPad 執行 EF 的取得資料處理是很快的,因為這位網友只給我看 Controller 裡 Action 方法的程式內容而已,我無從了解前端 View 是否有做其他的處理,所以我也不知道造成執行效能緩慢的原因為何。

無論使用 MvcPaging 或是 PagedList.Mvc,在取得分頁資料的操作處理上我並沒有遇到這樣的狀況,這些分頁套件並不是造成效能緩慢的主因,因為在我所處理過上萬筆甚至上百萬筆資料的分頁操作都不曾發生這樣的事情,其實造成效能緩慢的原因有很多可能,所以就必須一個一個去找尋原因,例如說將 PagedList.Mvc 從網站裡移除,然後觀察一次取得所有資料是否緩慢、使用 Skip Take 方法取得部份資料是否緩慢、不使用 EF 而直接使用 ADO.NET 執行 SQL Command、調整資料庫的設計或加上索引等,藉由這些的方式將原因給找出,而不是直接懷疑或認定 PagedList.Mvc 就是兇手。

這一篇簡單說明在 ASP.NET MVC 5 使用 EF 6 的 Intercepting 功能來觀察 PagedList.Mvc 的處理與執行的時間。

 


提醒

千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。

最近的留言