2013年12月28日 星期六

練習題 - 將 QueryString 字串轉換為指定型別的物件

這個題目其實蠻簡單的,有時後會需要將接收到的 QueryString 再加以處理,因為 QueryString 是屬於 NameValue 的結構,如下:

ID=12345678&FirstName=OOO&LastName=xxx

如果 QueryString 的內容不是又臭又長的時候,可以直接使用 HttpUtility.ParseQueryString() 方法將 QueryString 轉換為 NameValueCollection,然後可以依據 Name 來取得 Value 的內容。

但需要將 QueryString 轉成指定型別的物件呢?好像沒有內建的方法是可以直接將 NameValueCollection 轉成物件,不過還是有方法可以做這樣的處理,只是需要多做幾次簡單的轉換處理而已。

 


2013年12月19日 星期四

ASP.NET MVC - 使用 Cobisi Routing Assistant 觀察與檢查 Route 設定

前面一系列都在介紹 Attribute Routing 的內容,相較於在 RouteConfig.cs 裡設定 Route,使用 Attribute Routing 是比較彈性與方便,但是在管理上就不是那麼容易了,因為散在各處的 Controller 都有可能使用到 Attribute Routing 來做 Route 設定,以前只要在 RouteConfig.cs 與 Areas 裡的 AreaRegistration 就可以看到所有的 Route,現在則是每個 Controller 都要打開來看才行。

不過在 Visual Studio  裡有個工具則是一次列出專案裡的所有 Route 設定,讓我們可以馬上一目了然,並且還有提供檢測 Route Mapping 功能,讓我們未執行網站前就可以知道設定的 Route 是否能夠正確的 Mapping。

 


2013年12月18日 星期三

ASP.NET MVC - 使用 Attribute Routing, RouteArea

這次要說明的是 Areas 裡使用 Attribute Routing,其實也很簡單,相信很多人看過之前文章的參考連結就應該知道要怎麼使用,不過這邊還是稍做說明。

 


2013年12月17日 星期二

ASP.NET MVC - 使用 Attribute Routing, 設定路徑階層

上一篇「ASP.NET MVC - 使用 Attribute Routing」介紹了基本的使用以及稍做變化的設定方式,這一篇再來簡短的說明路徑設定以及在 Areas 下使用 RouteArea 的方式。

 


2013年12月16日 星期一

ASP.NET MVC - 使用 Attribute Routing

Attribute Routing 在原作者 Tim McCall 捐獻給 .NET Framework 後,在 ASP.NET MVC 5 與 ASP.NET Web API 2 的專案裡就可以使用,如果是使用 ASP.NET MVC 5 專案的話,可以在 SystemWeb.Mvc 命名空間裡看到,

image

這一篇將會對於 Attribute Routing 的使用做個簡單的說明。

 


2013年12月9日 星期一

ASP.NET MVC – 有關 Custom Action Filters 的建議

是的,這是一篇吹毛求疵的文章,並不是要告訴各位如何建立客製的 Action Filters,而是跟各位說「應該怎麼建立」Action Filters。

也許有人看完會覺得根本沒有什麼重點,但是必須要跟各位強調的就是「魔鬼藏在細節裡」,專案開發時對於細節多多的注意,並且要堅持與習慣一些作法,無論是自己一個人開發或是多人開發,只要共同依循、遵守一些默契與規定,在管理與開發維護上都會有很大的幫助與提昇開發上的效率。

 


ASP.NET MVC 實做具有多個角色權限的登入功能 - 使用客製 RoleProvider

之前的文章「ASP.NET MVC 實做具有多個角色權限的登入功能」裡我們做出了一個登出入的功能,使用者登入成功之後將使用者的多個角色資料給放置到 FormAuthentication 的 UserData 裡,當有需要驗證使用者時,在 HttpApplication.AuthenticateRequest 事件裡取得使用者的識別 ( Identity ) 並且建立 IPrincipal 物件然後放到 HttpContext.Current.User 中,其中的 IPricipal 物件包含 FormsIdentity 以及使用者角色資料。
之前的例子是我們在處理使用者的登入時,當使用者登入成功後會建立 FormsAuthenticationTicket 物件,然後於加密後存入 Cookie 之中,而我們是把 FormsAuthenticationTicket 的 Name 用來放使用者的 ID,而 UserData 則是用來放 Roles(角色資料)。
其實我們可以改用其他的做法,這邊將會介紹我們可以繼承 RoleProvider 以建立自己的 RoleProvider,讓 FormsAuthenticationTicket 的 Name 與 UserData 分別存放使用者顯示名稱與使用者資料 ID。
 

2013年12月6日 星期五

ASP.NET MVC - Partial View 與 Layout 的檔案名稱

其實這邊的內容是擷取「給 ASP.NET MVC 初學者 - 兩種主要 View Engine 的對照」的內容再加以補充,因為看到有太多人在 View 的檔案名稱管理上都是相當隨便,這樣在專案開發時(尤其是大型專案與多人開發的時候)將會發生管理上以及編輯效率上的問題,所以一定要正視這個原則。

如果這一點都無法作到的話,別跟我說你是在開發 ASP.NET MVC 專案,因為連這一點基本的原則都沒有堅持住的話,那麼在 View 裡面寫大量的伺服端程式或是直接讀取資料庫來做處理的各種很扯的荒唐行徑都會做得出來。

 


2013年12月4日 星期三

ASP.NET and Web Tools 2013.1 for Visual Studio 2012, MVC 5 Template

在上個月(2013-11)針對 Visual Studio 2012 有發佈了一項新的更新「ASP.NET and Web Tools 2013.1 for Visual Studio 2012」,而這一項的功能更新是對應 VS2013 的功能,也就是說 VS2013 可以進行開發的項目也可以在 VS2012 上面進行開發(不過還是會略有不同),有關此一功能更新項目的內容,可以參考下面的說明,

Release Notes for ASP.NET and Web Tools 2013.1 for Visual Studio 2012 : The Official Microsoft ASP.NET Site

image

http://www.asp.net/visual-studio/overview/2012/aspnet-and-web-tools-20131-for-visual-studio-2012

本篇會針對 VS2012 開發 ASP.NET MVC 5 的部份做簡短的介紹。

 


2013年12月3日 星期二

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

上一篇「ASP.NET MVC 使用政府公開資料 Part.2 - 增加條件過濾」已經完成了條件過濾的功能,但是一堆資料全部攤在眼前,我想不是每個人都能全部看完,所以在瀏覽資料時如果有分頁功能還是會比較好一些,而這一次所加入的分頁功能是使用之前有介紹過得 PagedList,但不會使用一般我們常用的 ToPagedList 而是使用 StaticPagedList。

對於 PagedList 這個套件不熟悉的朋友,可以先看之前的文章:

ASP.NET MVC 資料分頁 - 使用 PagedList.Mvc

ASP.NET MVC 資料分頁 - 使用 PagedList.Mvc:分頁列樣式

ASP.NET MVC 資料分頁 - 使用 PagedList.Mvc:自訂分頁資訊顯示

ASP.NET MVC 資料分頁 - 使用 PagedList.Mvc:AJAX

ASP.NET MVC 資料分頁 - 使用 PagedList.Mvc:Table 的 Checkbox

 


2013年12月2日 星期一

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

在「ASP.NET MVC 使用政府公開資料 Part.1」這一篇文章裡我們使用 ASP.NET MVC 透過 HttpClient 取得新北市政府公開資料的「WiFi 熱點」資料,最後將取得的資料存放於 SystemRuntime.Cache 類別的快取當中,這一系列的操作都是使用 Async/Await 非同步的方式來做處理。

因為我們所取得的是原始的資料,上千筆的資料一次全部顯示還真的看不太清楚,所以我們可以就所取得的資料來進行篩選,在頁面上增加條件過濾的選項,讓使用者可以藉由條件過濾來取得更精確的內容。

 


2013年12月1日 星期日

Partial View 與放在 App_Code 目錄裡的 Razor@helper

對於最近遇到的情況做了一些觀察與思考,因為之前沒有這麼作過與想過,所以看到有人這麼做的時候,當下的衝擊與震驚是相當大,然後周遭的人都被我這問題搞得有點煩,所以這幾天一直反覆思考著,因為對於比較深入的內容無法做仔細的研究與探討,所以只有將看到的相關內容與觀察的結果以文字方式做個紀錄。

 


2013年11月26日 星期二

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

現在越來越多政府單位有提供公開資料,我們可以拿這些公開資料來做一些工具或是服務,大部分的政府公開資料都會提供 JSON 或是 XML 格式的資料,也有一些是直接提供檔案讓我們下載使用,所以這一次就來練習怎麼在 ASP.NET MVC 網站裡使用政府公開資料,這裡將會使用「新北市政府資料開放平台」的「新北市 WIFI 熱點」來作為這次練習的資料來源。

 


2013年11月20日 星期三

ASP.NET MVC 實做具有多個角色權限的登入功能

這一篇老實說拖了蠻久的,因為是延續上個月所寫的 Code First 內容,

ASP.NET MVC 使用 Entity Framework Code First - 基礎入門

ASP.NET MVC 使用 Entity Framework Code First - 變更多對多關聯資料

在這兩篇文章裡,我們使用 Code First 建立了 SystemUser 以及 SystemRole 兩個類別以及兩者的多對多關係,其實已經建立好基礎的類別與資料存取方法,看來只差登入頁面、登出入程式處理就可以完成一個系統最基本的登入功能。

這一篇就來說明如何做一個基本且符合多個角色權限的登入功能。

 


2013年11月18日 星期一

Visual Studio Online

在 2013-11-13 的 Visual Studio Launch 發表了 Visual Studio 2013 以及介紹新功能,在以下的連結裡有許多發表會當日的影片內容,建議大家花點時間看看,

http://events.visualstudio.com/cht/home/

image

其中一項引起大家注意的就是「Visual Studio Online」,一開始我還不太清楚何謂 Visual Studio Online,後來才知道原來 Visual Studio Online 就是之前有介紹過而且也是我在使用的 Team Foundation Service,之前 Team Foundation Service 一直都是免費使用,不過改以 Visual Studio Online 正式發表之後就會依照不同的使用方式而有不同的收費方式。

 


ASP.NET MVC 使用 CKEditor - Custom ToolBar

CKEditor 預設了兩種 ToolBar 的設定,這邊將會說明怎麼使用,以及如何客製化 ToolBar 的設定。

 


2013年11月17日 星期日

ASP.NET MVC 使用 CKEditor.Mvc 與 HtmlEncodeOutput 補充說明

ASP.NET MVC 3 使用 CKEditor」這一篇文章是大約在兩年前所寫的,其實在使用上無論是 ASP.NET MVC 3, 4 或是 5 都是一樣的,但是這裡將會說明如何在 ASP.NET MVC 專案裡使用 CKEditor.Mvc 以及對於使用 config.htmlEncodeOutput 設定後的補充說明。

 


2013年11月12日 星期二

ASP.NET MVC 資料分頁 - 使用 PagedList.Mvc:Table 的 Checkbox

這一篇的文章標題不太好設定,我想大家應該看得懂,簡單說就是當我們所呈現的資料用 Table 來表示時,如果有需要是要在每個橫列加上 Checkbox,如何在每次分頁後去保留各個分頁的 Checkbox 狀態呢?

這個需求的解決方式有很多種,不過我這邊將會延續上一篇「ASP.NET MVC 資料分頁 - 使用 PagedList.Mvc:AJAX」的內容,我會在前端使用 Javascript 的方式來解決這個需求。

 


2013年11月10日 星期日

ASP.NET MVC 資料分頁 - 使用 PagedList.Mvc:AJAX

有關 ASP.NET MVC 資料分頁 - 使用 PagedList.MVC 的相關文章已經寫了三篇,

ASP.NET MVC 資料分頁 - 使用 PagedList.Mvc

ASP.NET MVC 資料分頁 - 使用 PagedList.Mvc:分頁列樣式

ASP.NET MVC 資料分頁 - 使用 PagedList.Mvc:自訂分頁資訊顯示

在基本的使用狀況下,上面文章所說明的內容都可以應用,但如果是想要使用 AJAX 的方式來處理資料分頁的話,其實 PagedList 在 GitHub 的 Repository 裡就有提供範例,不過我這邊的處理方式則是會跟範例程式有所不同。

 


2013年11月8日 星期五

初探 Entity Framework 6 - Async/Await Create, Read, Update, Delete with MVC 5

初探 Entity Framework 6 前面已經說明過幾個新功能:

初探 Entity Framework 6 的 Async/Await 功能

初探 Entity Framework 6 – Logging

初探 Entity Framework 6 - Intercepting Part.1

初探 Entity Framework 6 - Intercepting Part.2

而第一篇只有針對資料讀取的部份說明而已,還沒有對新增、修改、刪除來做說明,但其實非同步的新增修改刪除並沒有什麼特別的地方,所以這一篇就以 ASP.NET MVC 5  Controller 開始來說明如何將 Controller 裡基本的 CRUD 使用非同步的方式來做處理。

 


2013年11月7日 星期四

ASP.NET MVC 官方教學課程「Getting Started with EF 6 using MVC 5」

在 2013-11-01 時,ASP.NET MVC 官方網站增加了新的教學課程「Getting Started with EF 6 using MVC 5」,

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc

這一個教學課程比較進階一點,不適合給完全沒有接觸過 ASP.NET MVC 的朋友,而如果已經接觸過甚至已經開始使用 ASP.NET MVC 開發但是尚未接觸過 Code First 的朋友,這個課程就有些挑戰。

如果想要研習「Getting Started with EF 6 using MVC 5」課程的朋友,我會建議一定要先看過「Getting Started with EF 5 using MVC 4」這個課程,因為新課程的內容是承襲前一個版本的課程內容,所以先看過前一版本的課程後再研習新課程內容。

 


2013年11月5日 星期二

初探 Entity Framework 6 - Intercepting Part.2

上一篇的最後有說到要將 Insert, Update, Delete 所執行的 SQL Command 內容透過 NLog 給紀錄在文字檔中,但我們所使用的 NLogCommandInterceptor 並沒有這樣的處理,所以這部份就需要我們自己動手來做,在這一篇文章裡就說明處理的過程。

 


2013年11月4日 星期一

初探 Entity Framework 6 - Intercepting Part.1

前面已經說明說 Entity Framework 6 所提供的兩個新功能,分別是「初探 Entity Framework 6 的 Async/Await 功能」「初探 Entity Framework 6 - Logging」,而這一篇將會介紹另一個功能「Intercepting」,Intercepting 就字意上的解釋就是「截取」,我們可以使用這個新功能將 EF 所執行的 SQL Command 給截取起來後再做處理(例如紀錄在文字檔內) 。

這一篇將會以「MSDN - Data Developer Center > Entity Framework > Logging and Intercepting Database Operations」的內容來操作以及說明。

 


2013年10月30日 星期三

初探 Entity Framework 6 - Logging

我曾經寫過這麼一篇文章「ASP.NET MVC + NLog + Clutch.Diagnostics.EntityFramework 追蹤 EF 執行的 SQL Command」介紹可以使用 NLog 與 Clutch.Diagnostics.EntityFramework 在偵錯模式下可以將 EF 所產生並執行的 SQL Command 給顯示在 Visual Studio 的 Output 視窗中,如果網站放到測試機或是正式機要查看系統裡 EF 所執行的 SQL Command 還是可以透過 MiniProfilerGlimpse,這兩個工具我之前也介紹過。

Entity Framework 6 提供了一個新功能「Logging」,這個功能可以取代 NLog + Clutch.Diagnostics.EntityFramework,不過這只有 Entity Framework 6 才有提供,使用 EF 5 之前版本則是沒有這個功能,以下就說明怎麼使用這個功能。

 


2013年10月29日 星期二

初探 Entity Framework 6 的 Async/Await 功能

Entity Framework 6 其中一個新的功能就是有支援 Async/Await 功能,EF6 加入了許多非同步的方法,這些新的非同步方法會在方法名稱加上「Async」後綴詞,例如:FirstAsync, FirstOrDefaultAsync,  SumAsync, MinAsync, MaxAsync 等等。

這一篇文章只是看看 EF6 所提供的 Async.Await 功能要如何使用,先以讀取資料的操作來說明,而新增、刪除、修改等操作就留待下一篇再做說明。

 


2013年10月22日 星期二

ASP.NET MVC 使用 jQuery EasyUI DataGrid - 顯示 Details(Sub DataGrid)

上一篇「ASP.NET MVC 使用 jQuery EasyUI DataGrid - 顯示 Details(使用 PartialView)」我們已經完成使用 Partial View 以及 jQuery EasyUI DataGrid DetailView 的方式來顯示 Master-Details 的操作,不過使用 Partial View 雖然也可以回傳 Table 格式的內容,但最好的方式還是使用一致的 UI 顯示模式會比較好,所以這邊我們就將原本在 Expand Row 顯示 Partial View 內容給改為使用 DataGrid 的方式來顯示 Details 資料。

 


2013年10月21日 星期一

ASP.NET MVC 使用 jQuery EasyUI DataGrid - 顯示 Details(使用 PartialView)

有時候我們會遇到需要顯示 Master-Details 資料的需求,而 ASP.NET WebForm 的 GridView 也蠻多這種的範例,而通常使用者最希望顯示的 Master-Details 樣式 Grid 的某個 Row 下面去展開 Details 資料,例如:

image

from Expandable Rows in GridView - CodeProject

而使用 jQuery EasyUI DataGrid 也可以很容易就可以做出這樣的 Expand Row 的功能來顯示 Details 資料,而這次先說明如何使用 ASP.NET MVC 的 Partial View 來完成這次的功能。

 


2013年10月19日 星期六

ASP.NET MVC 使用 jQuery EasyUI DataGrid - Checkbox

其實在之前就曾經在「jQuery EasyUI DataGrid Checkbox 資料設定與取值」這一篇文章裡就已經討論過了,這一篇主要是觀察在有加入 Pagnation 以及 Sorting 之後對於 Chekbox 的處理,最後是參考 jQuery EasyUI DataGrid 的範例,動態改變選擇模式(單選或多選)。

 


2013年10月18日 星期五

Visual Studio 2013 RTM 相關資訊整理

上個月 Visual Studio 2013 RC 發佈的時候就整理了相關資訊,而現在 Visual Studio 2013 正式板 Release 了,而相關資訊及文章也相當多,因為 VS2013 RTM 發佈的同時,也有許多技術也一併更新版本並且一同發布,所以這邊就做了整理,將目前有關 Visual Studio 2013 RTM 以及其他技術更新訊息做了整理。

RTM,Release To Manufacturing,「發放給生產商。某些電腦程式以「RTM」作為軟體版本代號 …… 以 Windows 7 為例:RTM 版與零售版的版本號是一樣的。另外一種 RTM 的稱呼是 RTW(Release To Web),表示正式版本的軟體發布到 Web 網站上供客戶免費下載,這個名詞在 ASP.NET 元件以及 Silverlight 的發布上很常見。」 - from Wiki:軟體版本週期

 


ASP.NET MVC 資料分頁 - 使用 PagedList.Mvc:自訂分頁資訊顯示

上一篇「ASP.NET MVC 資料分頁 - 使用 PagedList.Mvc:分頁列樣式」說明了 PagedList.Mvc 所提供的兩個 Html Helper,分別為「PagedListPager」與「PagedListGoToPageForm」,雖然 PagedListPager 有提供 PagedListRenderOptions 以及幾個預設的樣式讓我們使用,但如果我們想要自訂分頁資訊的顯示樣式的話,就必須要靠我們自己來做調整了,以下說明可以自己調整分頁資訊顯示的幾種方法。

 


Visual Studio 2013 佈景主題與 Code Style

千呼萬喚、眾所期待的 Visual Studio 2013 終於在 2013-10-18 正式 Release 了,我想有什麼新功能就不必我在這邊多做介紹,應該已經很多人有下載並安裝 VS2013 RC 來體驗,或者也可以在「MSDN 台灣部落格」詳閱由微軟 MVP - Demo Fan 所撰寫的「Visual Studio 2013 新功能介紹 - 開發生產力大進擊」來得知新功能的細節,另外也有其他 MS MVP 以及 TechDays 講師的文章有有詳細介紹:

Visual Studio 2013的進階偵錯與效能分析技巧

Visual Studio 2013 + Team Foundation Service 進行持續整合與壓力測試

前端工程師的百寶盒 - Visual Studio 2013 開發工具

既然已經有這麼多前輩對 VS2013 的新功能做了很詳盡的介紹,我實在沒必要在這邊班門弄斧,所以這篇文章就來介紹一下我的 VS2013 開發環境所使用的佈景主題以及 Code Style。

 


2013年10月17日 星期四

ASP.NET MVC 資料分頁 - 使用 PagedList.Mvc:分頁列樣式

上一篇文章「ASP.NET MVC 資料分頁 - 使用 PagedList.Mvc」說明了如何在 ASP.NET MVC 網站專案裡使用的方式,而這一篇將會來說明有關分頁列樣式的設定,以及如何自訂分頁列樣式。

 


2013年10月15日 星期二

ASP.NET MVC 使用 Entity Framework Code First - 變更多對多關聯資料

上一篇「ASP.NET MVC 使用 Entity Framework Code First - 基礎入門」已經完成了系統使用者(SystemUser)與系統角色(SystemRole)兩個類別,並且建立了兩個類別多對多的關係,而這一篇則將會以系統使用者指定系統角色的資料變更操作來做說明。

文章裡並不會逐條說明每段程式與每個頁面的詳細內容與建置步驟,只會關注在多對多關聯資料的變更操作上。


2013年10月14日 星期一

ASP.NET MVC 使用 Entity Framework Code First - 基礎入門

最近看到 Bibby 與 KKBruce 都寫了 Code First 的相關文章,所以也就跟著來寫一篇,

Bibby - Simple Thoughts on Everything: Code First 紀錄

KingKong Bruce記事: 使用Entity Framework Code first建立多對多關係

用我的角度與敘述方式來為大家簡單說明,而這一篇文章所建立好的範例也將會在後續的其他主題的文章繼續沿用。

 


2013年10月12日 星期六

ASP.NET MVC 使用 jQuery EasyUI DataGrid - 多欄排序 (Multiple Column Sorting) Part.3

在「ASP.NET MVC 使用 jQuery EasyUI DataGrid - 多欄排序 (Multiple Column Sorting) Part.1」裡我們選擇不使用 Dynamic Expression API 來處理多欄位排序的操作,並不是說 Dynamic Expression API 不能做多重排序,而是我們應該先以 LINQ 本身所提供的方法來做解決,並藉此多加了解 LINQ 的 OrderBy, ThenBy, IOrderedQueryable<T> 等這些 LINQ 的基本操作方法。

而這一篇則是補充說明怎麼使用 Dynamic Expression API 來完成多欄位排序的操作。

 


2013年10月11日 星期五

ASP.NET MVC 使用 jQuery EasyUI DataGrid - 多欄排序 (Multiple Column Sorting) Part.2

前一篇「ASP.NET MVC 使用 jQuery EasyUI DataGrid - 多欄排序 (Multiple Column Sorting) Part.1」已經完成了多欄排序的伺服器端的程式內容,不過還是有修改的空間,所以這篇文章就接續完成需要修改的部份。

 


2013年10月10日 星期四

ASP.NET MVC 使用 jQuery EasyUI DataGrid - 多欄排序 (Multiple Column Sorting) Part.1

上一篇「ASP.NET MVC 使用 jQUery EasyUI DataGrid - 排序 (Sorting)」說明了如何讓 DataGrid 加入資料排序的功能,而 jQuery EasyUI 1.3.4 有提供了一個新的屬性「multiSort」,這個屬性可以讓 DataGrid 有多欄排序的功能,之前的排序都是針對某一個欄位做排序顯示,而多欄排序是可以同時選擇多個不同欄位,而且欄位的排序順序可以不同,這一篇文章就來說明要如何處理多欄排序的操作。

 


2013年10月9日 星期三

ASP.NET MVC 使用 jQuery EasyUI DataGrid - 排序 (Sorting)

經過兩篇的說明之後,現在我們繼續往進階一點的功能前進,這一篇將會說明到如何處理 DataGrid 的排序功能,另外會用到之前曾經介紹過的 Dynamic LINQ ( Dynamic Expression API )。

 


2013年10月8日 星期二

2013年10月7日 星期一

ASP.NET MVC 顯示存在資料庫裡的 Image

在論壇裡看到有人提出這樣的問題,圖片以 Binary 存於資料庫裡,在頁面上顯示時,如果頁面上要顯示多張圖片時,就會向資料庫多次讀取資料,所以詢問是否有無比較有效率的方式。

其實就我實務上的經驗,除非是遇到沒有提供儲存空間的情況而把圖片以 Binary 存於資料庫的情況,不然我還是會以一般的作法將圖片存在磁碟或是指定位置裡,畢竟資料庫還是儲存資料就好,還是不希望資料庫有其他的用途。

這篇文章就以 Northwind 的 Category 來做示範,因為手邊就只有這個資料庫裡有現成的 Binary 圖片資料可用,將會幾個例子來說明可用什麼樣的方式來處理。

 


2013年10月6日 星期日

ASP.NET MVC 使用 jQuery EasyUI DataGrid 基礎篇

ASP.NET MVC 不像 ASP.NET WebForm 有提供現成的 Server Controls 可以使用,例如在 ASP.NET WebForm 最常拿來使用的就是 GridView,ASP.NET MVC 沒有 Server Controls 可以使用的這一點在很多 ASP.NET WebForm 開發人員被視為一種阻礙,但我會覺得這並不是一種阻礙反而是一種解放,Server Controls 是 ASP.NET WebForm 的一大重點,會用 Server Controls 是學習 ASP.NET WebForm 的基礎,學好怎麼使用 Server Controls 對於開發 ASP.NET WebForm Application 來說是有很大的幫助,但是 Server Controls 也是限制開發的一個阻礙。

現在這麼多網頁開發技術裡,大部分並不像 ASP.NET WebForm 是有所謂的 Server Controls  來支援開發,因為大部分的開發都是使用 HTML 與前端技術來組成網頁裡所呈現的內容,因為使用相同的前端技術,只是後端資料處理的方式有所不同而已,所以前端網頁所呈現內容的組成方式就可以在不同的網頁開發技術裡使用,所以不管是 JSP, PHP, Ruby on Rails 都可以使用相同的技術來建立網頁呈現內容,而 ASP.NET MVC 也一樣可以使用而不會受到 Server Controls 的限制。

這篇文章介紹如何在 ASP.NET MVC 裡使用 jQuery EasyUI DataGrid,其容易設定、清楚的說明文件還有很多不同使用情境的範例說明,適合用於將資料以表格呈現的情境。

 


2013年10月2日 星期三

Visual Studio Extensions - Bootstrap3 For Mvc4

之前曾經為大家介紹了「使用 ASP.NET MVC 4 Bootstrap Layout Template (VS2012)」,透過 Visual Studio 擴充功能安裝建立好的專案範本,讓我們可以用快速方便的方式來建立一個已有 Bootstrap 2.3.2 的 ASP.NET MVC 網站專案。

而 Bootstrap 3 已經在不久前正式 Release 了,再加上即將在本月正式發佈的 Visual Studio 2013,其中新版ASP.NET 專案的預設範本也會使用 Bootstrap 3, VS2012 or VS2010 開發 ASP.NET MVC 4 專案時如果要使用 Bootstrap 3 就需要自己動手處理,而不久前有位中東地區的網友在 Visual Studio Gallery 釋出了 Bootstrap3 For Mvc4 與 Bootstrap3 For Mvc4 VS2010,讓我們可以在安裝擴充套件之後就可以建立 Bootstrap3 的 ASP.NET MVC 4 網站。

 


2013年9月28日 星期六

Visual Studio 2013 開發 ASP.NET MVC 於執行偵錯模式時的小改變

Visual Studio 2013 有不少的改變,除了很多大功能的增進與改善之外,有許多小地方的改變也蠻貼心的,讓我們在開發時可以更為順暢,這篇文章只是記錄一下這個小改變。


2013年9月27日 星期五

ASP.NET MVC 防範 CSRF 攻擊 - 在 AJAX 裡使用 AntiForgeryToken 的處理

在 ASP.NET MVC 裡要防範 CSRF 攻擊可以在檢視頁面上加入使用 AntiFrogeryToken,並且在後端所對應的 Action 方法加上 ValidateAntiForgeryToken Attribute,這樣就可以防止 CSRF 的攻擊,相關的資訊我之前有寫過依篇文章來說明「ASP.NET MVC - ValidateAntiForgeryToken 與 自定 HandleError 處理顯示客製的錯誤訊息頁」。

但如果網站的前端與後端互動大多都是經由 AJAX 方式的話,似乎就無法加上 AntiForgeryToken 來防護 CSRF 的攻擊,有些朋友是認為因為 Javascript 操作是不能跨網域的,所以就不用刻意對 AJAX 的操作加入 AntiForgeryToken 防範 CSRF,但我則是認為還是有必要去做這一層的防範,外在的攻擊手法是我們無法可以預測的,我們對於網站還是有必要去做到一些根本的防護,至少是多一層保障。

而這一篇則是跟大家說明如何在 AJAX 的操作裡使用 AntiForgeryToken。

 


2013年9月23日 星期一

ASP.NET MVC 建立可重複使用的縣市鄉鎮市區連動下拉選單 (Reuseable Cascade DropDownList)

這個部落格裡,光是連動下拉選單為主題的文章我就寫了好幾篇,如下:

jQuery 對下拉選單 DropDownList 的操作 - 2:連動下拉選單

jQuery 練習題:三層式連動下拉選單(無後端整合)

ASP.NET MVC 3 - 基本三層連動式下拉選單應用

jQuery 練習題:ASP.NET MVC 連動下拉選單與 jQuery UI Autocomplete ComboBox

連動下拉選單 - 使用 jQuery EasyUI ComboBox

其實連動下拉選單的功能並不難做,當頁面上需要有連動下拉選單功能時,都需要再去動手做,從頁面、Javascript 程式以及後端程式,一次兩次的需求的話是還好,不會太麻煩,但是有很多頁面都需要做連動下拉選單的時候,就會覺得很麻煩了,最常見的就是「縣市鄉鎮市區連動下拉選單」,尤其是當有一堆表單或是同一個頁面上有很多個別欄位都需要縣市與鄉鎮市區資料的時候。

所以這邊就使用 ASP.NET MVC 的 Partial View 把縣市鄉鎮市區連動下拉選單的做成可以重複使用,而且可以應付同一個頁面有多組資料都需要縣市、鄉鎮市區連動下拉選單的需求。

P.S. 此功能是顯示台灣的縣市與鄉鎮市區資料。

 


2013年9月21日 星期六

twMVC @ Microsoft TechDays Taiwan 2013 - (09.24 ~ 09.26)

每年的九月就是期待著一年一度的 Microsoft TechDays 盛會,在去年的時候 twMVC 也有參與,twMVC 與 Study4.TW 在此盛會中有個攤位讓大家能夠認識我們,而今年同樣也是承蒙台灣微軟的贊助,讓 twMVC 在今年仍然可以在此盛會中與大家見面,此次的 Microsoft TechDays 合作社群除了 twMVC 與 Study4.TW 之外,也加入了 SQL PASS 台灣,

image

去年社群攤位的位置是位在比較少人會經過的地方,而今年就不一樣了,合作社群攤位將會與 Microsoft MVP 攤位擺在一起,結合 MVP 與社群的力量,讓大家可以在這裡除了找社群之外也可以向在各領域擁有豐富經驗的台灣微軟 MVP 諮詢與交流。

 


2013年9月15日 星期日

當 ASP.NET MVC 的 DropDownList 遇到了 ViewData or ViewBag

這個部落格有關 DropDownList 的文章有 10 篇,而主要在講解 DropDownList HtmlHelper 有以下兩篇:

ASP.NET MVC 3 - DropDownList 的基本設定方式

ASP.NET MVC 3 - DropDownListFor 的設定方式

另外進階一點的有:

ASP.NET MVC 3 - 基本三層連動式下拉選單應用

不過還是時常會遇到有人在問 ASP.NET MVC DropDownList 怎麼設定以及卡關的問題,而這些問題中就屬有關 ViewData or ViewBag 的最多,甚至於有很多遇到問題的人會視為 Bug 或是列為絕對不能用的作法。其實這都是沒有詳細去追查原因的擅自定論,如果花點時間去追查一下 ASP.NET MVC 的原始碼就會知道原因,而且也會知道怎麼去正確的設定 DropDownList。

 


2013年9月12日 星期四

使用 Unity.MVC4 (Enterprsie Library Unity 2.1) 的進階註冊類別方式

之前曾經有位大家說過使用 Unity bootstrapper for ASP.NET MVC 的進階註冊類別方式:
Unity bootstrapper for ASP.NET MVC 進階註冊類別方式

但因為是使用 Unity 3 的關係才能夠使用那樣的方式,而且還必須是建置在 .NET Framework 4.5 的 ASP.NET MVC 專案才能夠使用,而使用非官方的 Unity + ASP.NET MVC 整合套件「Unity.MVC4」就沒辦法啦!

這一篇將會為各位說明如何在使用 Unity 2.1 的情況下也能做到自動註冊類別的方法。

 


2013年9月11日 星期三

使用 ASP.NET MVC 4 Bootstrap Layout Template (VS2012)

使用 Bootstrap 有一段時間也已經實際用在好幾個專案,在之前剛結束的「twMVC - Workshop #1」裡帶著學員實作的專案也是使用 Bootstrap,Bootstrap 不久前也已經推進到了 3.0 版本,而 VS2013 裡所建立的 ASP.NET 專案(新版 ASP.NET)不管是 WebForm 還是 MVC 都已經將專案範本使用 Bootstrap 了,雖然目前在 VS2013 RC 所建立的 ASP.NET 網站範本所使用的 Bootstrap  為 2.3.1 版,不過在 VS2013 的正式發佈版本會在專案範本裡使用 Bootstrap 3.0。

而在 VS2012 開發網站時,如果要在網站裡加入 Bootstrap,除非我們所拿到的網站 prototype 是已經加入了 Bootstrap,不然就是需要我們動手去做,而網路上大多都是介紹如何在一個已經建立好的網站專案裡透過 NuGet 加入 Bootstrap,這樣的方式也是可以,但如果一開始建立好的網站範本就如同開發 ASP.NET MVC 5 那樣,已經套用好 Bootstrap 的 Project Template,這樣子就會方便了。

接下來就跟大家簡單說明使用「ASP.NET MVC 4 Bootstrap Layout Template (VS2012)」。

 


2013年9月10日 星期二

Visual Studio 2013 RC 相關資訊整理

今天(2013/09/10)發佈了 Visual Studio 2013 RC,不管是 MSDN、TechNet 訂閱用戶或是非訂閱用戶都可以在微軟的 Visual Studio 產品專頁下載 VS2013 RC,而許多部落格以及網站都陸續發表了 VS2013 RC 的相關文章,因為資訊相當多,所以這邊就做了整理,給有興趣了解的朋友可以在這裡看到這些資訊。

RC,Release Candidate,「指可能成為最終產品的候選版本,如果未出現問題則可釋出成為正式版本。」
RTM,Release To Manufacturing,「發放給生產商。某些電腦程式以「RTM」作為軟體版本代號 …… 以 Windows 7 為例:RTM 版與零售版的版本號是一樣的。另外一種 RTM 的稱呼是 RTW(Release To Web),表示正式版本的軟體發布到 Web 網站上供客戶免費下載,這個名詞在 ASP.NET 元件以及 Silverlight 的發布上很常見。」

from Wiki - 軟體版本週期

 


2013年9月9日 星期一

Unity bootstrapper for ASP.NET MVC 進階註冊類別方式

在「ASP.NET MVC 使用 Autofac」這篇文章裡介紹了另一套 IoC Container 「autofac」於 ASP.NET MVC 的使用方式,而且 autofac 以及一些 IoC Container 都有提供進階的註冊類別方式,可以讓我們在註冊類別的時候可以有比較方便的作法,例如:

image

而 Unity 3.0 也有提供類似這樣的註冊類別的方式,接下來就說明如何使用。

 


2013年9月7日 星期六

ASP.NET MVC 使用 Autofac

在這之前有關 IoC Container 已經為各位說明了 Enterprise Library Unity, Simple Injector 這兩種,其中 Enterprise Library 是介紹了第三方所製作的 ASP.NET MVC 與 Unity 整合套件「Unity.MVC」,以及 Enterprise Library 於 6.0 版 Release 時所推出的「Unity bootstrapper for ASP.NET MVC」,除了前面所說的兩種 IoC Container 之外,其實還有很多 IoC Container 也是有許多開發者在使用,各種 IoC Container 都有其優缺點,但也沒有辦法說那一種IoC Container 比較好或比較壞,只有適合不適合的 IoC Container,因為專案與開發者或團隊的因素佔絕大部分。

Autofac 是我第一個接觸的 IoC Container,也應該是比較多人知道或是使用的 IoC Container,Autofac 使用上有很多的優點,再加上官網以及網路上的相關文章、討論也相當多,所以就變成很多人第一個學習或是專案優先採用的 IoC Container,這篇內容一樣是拿「分層架構」的範例程式來做說明,IoC Container 改使用 Autofac,不過 IoC 的概念與內容再其他文章裡有講過,所以就不會講太多理論的內容,直接切入實作。

 


2013年9月3日 星期二

小工具介紹:IIS Express GUI 與 IIS Express Manager

從 VS2010 開始,開發網站時就多了 IISExpress 這個程式開發伺服器,使開發網站時於偵錯模式下的運作可與 IIS 一般,更能貼近真實的執行環境,而到了之後的 VS2013 將只有 IISExpress 作為開發伺服器,因為原本的 ASP.NET 開發伺服器(ASP.NET Development Server)是以 IIS 6.0 架構去執行,所以將會在 VS2013 裡消失。

IISExpress 有如一個小型的 IIS,但是並沒有一個圖形操控介面工具存在,所以想要瀏覽一個開發中的網站時,除非有開啟 Visula Studio 或是以指令碼去啟動 IISExpress 並且執行要瀏覽的網站後才能夠瀏覽,並不是很方便。

不過昨天發現到有一個小工具,有提供一個相當簡單的 GUI 介面,可以讓我們用相當方便的方式開啟或關閉電腦中在 IISExpress 裡有建立虛擬目錄的網站,而且不管是 IISExpress 7.5  或 8.0 都可以使用喔!

 


2013年9月2日 星期一

ASP.NET MVC 與 Elmah.MVC 2.1.1 以及使用 Windows Azure SQL Database 的Schema 修改

將近一年的時間沒有寫關於 Elmah 或 Elmah.MVC 的文章,因為這工具的安裝與使用並不是太過於複雜,所以之前的文章內容都已經含蓋了大部分的功能,而最近透過 NuGet 為專案加入 Elmah.MVC 時發現到版本推進到了 2.1.1,觀察安裝後的內容後有發現到了一些改變,畢竟自從去年 11 月所更新的 2.0.2 之後,一直到今年的七月才又再一次的更新到 2.1.0,這一篇就來看看有做了什麼樣的改變。

 


2013年8月28日 星期三

ASP.NET MVC 4 + jQuery EasyUI Tree and TreeGrid

在今年七月時有發了兩篇關於無限階層樹狀選單的文章:

ASP.NET MVC + jQuery Easy UI Tree 無限階層的樹狀選單
ASP.NET MVC + jQuery Easy UI Tree 無限階層的樹狀選單 - 使用 JSON

第一篇說明如何在 ASP.NET MVC 的 View 裡使用 Razor Page Helper 建立遞迴顯示樹狀節點的 Tree 清單內容,然後再套用 jQuery EasyUI Tree,讓頁面上的清單轉換為樹狀選單。

第二篇則是進階的內容,分別說明如何在前端接收 JSON 資料然後產生樹狀選單,另一個則是說明非同步載入樹狀選單節點內容的作法。

這兩篇都是在說明如何去顯示既有的階層資料然後套用 jQuery Easy UI Tree 來顯示為樹狀選單,然而階層資料的維護管理功能則是隻字未提,這也不是要賣關子或是留一手,而是這個管理功能說起來也算是有些複雜,一直推敲琢磨該用什麼方式來說明會比較好,所以一直延宕至今。

因為也不是什麼多麼稀奇古怪的實作內容,也沒有什麼好隱藏的,所以最後決定將做好的樹狀選單的階層資料維護功能提供給大家,將整個 Solution 放到 GitHub 上面,所以這一篇文章只會簡單說明如何使用 jQuery EasyUI TreeGrid 做出這樣一個階層資料維護功能,其餘的就請各位自己去 GitHub 抓檔案下來看。

 


2013年8月24日 星期六

ASP.NET MVC Route 基本題 - 如何自定 URL 的子目錄路徑

對於剛學習 ASP.NET MVC 的朋友來說,Route 設定是比較少去碰到的,甚至於有人會對於 Route 是不太清楚甚至於有些模糊,這一篇講個 ASP.NET MVC 初學者常會誤解的作法,哪就是設定 URL 的子目錄路徑,尤其是已有 ASP.NET WebForm 開發經驗的朋友會把以往的開發經驗給帶到 ASP.NET MVC 的開發上,所以在這邊說明一下。

 


2013年8月15日 星期四

錯誤更正:有關 ASP.NET MVC 分層架構使用 Unity 的 DbContext 處理

2014-12-02 補充說明:
這一系列的文章並不適合初階及中階的開發人員,如果你是程式開發的初學者或是 ASP.NET MVC 初學者,甚至是開發經驗少於兩年的開發人員,請馬上離開此篇文章。

有網友在「ASP.NET MVC 專案分層架構 Part.6 - DI/IoC 使用 Unity.MVC」這篇文章提出了一個問題:

image

一開始我還以為是我的 DbContext 是不是有做了什麼特殊設定還是忘了做什麼設定才會出現這樣的情況,然後我把範例程式給找出來,按照網友所提出的情境做操作,結果還真的如他所說的,當我在執行的網頁上做新刪修查時都不會有問題,資料也會同步,但如果直接對資料做修改後,網頁上面的資料並不會跟著改變,在仔細看過原本的程式之後才恍然大悟,我犯了一個嚴重的低級錯誤才會導致這種資料不一致的狀況,這一篇就是來說明要如何改正這個問題。

有關這個錯誤的文章如下:

ASP.NET MVC 專案分層架構 Part.6 - DI/IoC 使用 Unity.MVC」「ASP.NET MVC 4 使用 Unity bootstrapper for ASP.NET MVC

可以按照此篇文章的作法來修正錯誤。

 


2013年8月10日 星期六

ASP.NET MVC + NLog + Clutch.Diagnostics.EntityFramework 追蹤 EF 執行的 SQL Command

有關追蹤觀察 Entity Framework 所產生的 SQL Command,在之前我有寫了幾篇文章來做介紹:

觀察 ADO.NET Entity Framework 5.0 產生的 SQL Command 與取得 Entity 對應的 Table Name

觀察 Entity Framework 轉換所產出的 SQL Command

但是在上面兩篇文章裡所介紹的方法都是必須要去添加程式,開發專案的時候總不能每個執行 EF 的地方都要去手動加入程式片段,所以我一直找尋一個最簡單而且也不需要對專案程式再去做修改的解決方式。

其實現在有很多方法可以去追蹤觀察 EF 所產生的 SQL Command,但往往都需要過多的配置或者是被迫要更改我們已經習慣的開發方式,過多的配置就代表日後的維護困難以及交接的不便,而更改已經習慣的開發方式就影響甚鉅,有時為了需要妥協而採納一個不熟悉也不習慣的方法,這會嚴重影響開發效率,甚至讓原有的開發人員四處碰壁。

剛好今天看到了一篇文章的介紹,並且在自己實際開個專案來測試一下,的確是相當符合我的需求,不需要對原本程式做過多的修改或是更改程式原有結構(或是更換範本),也不需要改變我原來的開發習慣,只要利用已經熟悉的 NLog 並且再加入 Clutch.Diagnostics.EntityFramework 就行了。

 


2013年7月23日 星期二

ASP.NET MVC - Html.Partial 與 Html.RenderPartial

相信很多人都被 Html.Partial 與 Html.RenderPartial 這兩個給搞糊塗(另一組則是 Html.Action 與 Html.RenderAction,還有 ViewResult 以及 PartialViewResult),這邊就簡單說明一下 Html.Partial 與 Html.RenderPartial 的區別。

 


2013年7月21日 星期日

Visual Studio 2012 擴充套件 - BuildVision

在 Visual Studio 開發到一個階段時,我們會重新建置專案(Project)或是方案(Solution),每次建置的時間都不盡相同,當所開發的專案越來越大的時候,會想要知道每次重新建置的時間,我們可以開啟 Visual Studio 的「輸出」視窗來觀察建置摘要裡的訊息,解此了解每個專案建置所耗費的時間。

image

不過之前有發現到另一個 Visual Studio 擴充套件,可以讓我們一目了然地知道每個專案的建置狀況,所以這邊介紹給大家。

 


2013年7月15日 星期一

ASP.NET MVC + jQuery Easy UI Tree 無限階層的樹狀選單 - 使用 JSON

上一篇「ASP.NET MVC + jQuery Easy UI Tree 無限階層的樹狀選單」介紹了在 View Page 裡使用 ul li 清單項目顯示節點資料,然後套用 jQuery EasyUI Tree 以顯示樹狀選單,除了這個方式以外也可以讀取後端產生的 JSON 資料來產生樹狀選單。

讀取 JSON 資料來產生樹狀選單的方式有兩種,一種是先在後端把所有資料做好階層整理後再轉為 jQuery EasyUI Tree 可接受的 JSON 格式資料,而另一種則是非同步的方式,先顯示第一層的節點資料,如果有第二層資料,則透過 AJAX 的方式向後端取得,這兩種方式都將在這篇文章裡向大家說明。

 


2013年7月14日 星期日

ASP.NET MVC + jQuery Easy UI Tree 無限階層的樹狀選單

在網站裡要能夠清楚顯示一個有階層項目的資料,能夠清楚顯示資料的功能有很多,但樹狀選單似乎都是最多人的選擇,而要顯示無限階層的樹狀資料,應該會有很多人就會卡住。

初學者在剛開始做這種階層資料的時候,通常都會一層一層的包含下去,但是要讓他們做無限階層,除非他們知道要如何使用遞迴的方式,以及在 SQL Server 裡用 CTE 的方式取得所有的階層資料,在 We b Forms 的專案裡還可以使用現有的 Server Control 然後套上資料就可以解決(當然還是需要花點功夫與時間去做處理),而在 ASP.NET MVC 所開發的網站並沒有現成的控制項可以使用,絕大部分的開發者都去找現成的前端套件來使用。

這篇文章就簡單地來介紹在 ASP.NET MVC 網站裡使用 jQuery EasyUI Tree 來完成無限階層樹狀選單的功能。

 


2013年7月12日 星期五

ASP.NET MVC 專案分層架構 - 建議與補充說明

2014-12-02 補充說明:
這一系列的文章並不適合初階及中階的開發人員,如果你是程式開發的初學者或是 ASP.NET MVC 初學者,甚至是開發經驗少於兩年的開發人員,請馬上離開此篇文章。

從去年 (2012) 的十月開始一直到今年 (2013) 四月之間,我一共寫了六篇有關專案分層架構的文章,從一開始的怎麼在單一的 MVC 網站專案去抽出資料存取的部分為 Repository,接著再把 Repository 從網站專案分出來,自成一個類別庫專案,再來就是把屬於商業邏輯的部份抽出來成為 Service,然後就是如何使用 IoC Container。

很多人對於這個系列有很大的興趣,但也有很多人對於這些文章的內容有很多的疑問與困惑,從文章下面的留言回覆就可以感受到,甚至於在 twMVC 的每週四固定聚會時都會當面詢問有關這系列文章的相關問題。

有鑑於目前對於有這麼多問題的情況下,在進入此系列的下一篇文章前,實在需要來個中場休息時間(這個中場休息時間還真久,距離上一篇的系列文章已經快要三個月了),藉由這一篇文章來做個補充說明與看這個系列文章的一些建議。

 


2013年7月10日 星期三

Visual Studio 2013 Preview 新功能 Enhanced Scroll Bar 與 VS2012, VS2010 Productivity Power Tools

最近「點部落 - Level Up」發表了一系列的 VS 2013 Preview 新功能的介紹,另外我也有訂閱「The Ultimate Visual Studio Tips and Tricks Blog」,這個部落格最近也是把 VS 2013 Preview 的新功能做一系列的介紹,有個新功能「Enhanced Scroll Bar」讓我特別注意,因為它所提供的功能是在 Sublime Text 也有的,Sublime Text 裡面瘩這個類似功能叫做「Minimap」。

其實這個功能在之前的 VS2012 與 VS2010 是沒有提供的,而是必須要有安裝「Productivity Power Tools」之後才會有提供,不過老實說,我是到今天才知道原來 Productivity Power Tools 有提供 Enhanced Scroll Bar,而 VS 2013 Preview 則是把這個功能正式納入到 Visual Studio 當中。

 


2013年7月9日 星期二

Visual Studio 2013 Preview - ASP.NET Web Forms 加入 ASP.NET MVC 5

上一篇「Visual Studio 2013 Preview 的 ASP.NET MVC 5 初體驗」裡把 ASP.NET MVC 5 的一些改變的地方讓大家知道,另外也向各位說明了 ASP.NET Web Forms 與 ASP.NE MVC 專案可以混合不一樣的核心參考,Web Forms 專案可以包含 MVC 與 Web API,反之 MVC 專案也可以包含 Web Forms。

在今年一月的時候,我就曾經寫了一篇文章說明如何讓 ASP.NET Web Forms 專案加入 ASP.NET MVC:「ASP.NET Web Forms 專案加入 ASP.NET MVC 4」,文章裡有提到要經過很多步驟的處理之後才能夠讓 Web Forms 專案加入 MVC,而在 Visual Studio 2013 Preview 所看到的 ASP.NET 專案項目就有提供了混合專案的功能,所以未來在使用 Visual Studio 2013 開發新版 ASP.NET 網站就有提供混合專案的選項。

而這一篇文章就來說明 Visual Studio 2013 Preview 開發 ASP.NET Web Forms 專案並加入 MVC 時的一些細節,同樣的也需要說明,因為這一篇文章是以 Visual Studio 2013 Preview 為開發環境,所以之後的正式版可能會有所變動,請大家要注意。

 


2013年7月6日 星期六

Visual Studio 2013 Preview 的 ASP.NET MVC 5 初體驗

上個月底釋出 Windows 8.1 Preview 與 Visual Studio 2013 Preview 之後,我也跟著搶鮮下載以及安裝,我是安裝在 VM 裡面去體驗,整體的感覺還不錯,尤其是 Visual Studio 2013 Preview,將 Visual Studio 2012 以及歷次 Update 所添加與更新的功能做得更加完整,讓我對 VS2013 的 Release 相當期待。

這一篇文並不是 Visual Studio 2013 與 ASP.NET MVC 5 的教學文章,只是記錄下在 Visual Studio 2013 Preview 裡使用 ASP.NET MVC 5 的體驗以及標示與 ASP.NET MVC 5 之前版本的差異,讓大家可以有個初步的了解,因為目前所釋出的 VS2013 還只是 Preview 版本,所以這一篇文章裡所描述的內容可能與之後所發行的正式版本會有所出入,在這邊先告訴大家。

 


2013年7月5日 星期五

ASP.NET MVC 使用 Area - 以 Backend 後台為例

對於開發 ASP.NET WebForms 的程式設計人員來說,假如網站規模不是很大,但又需要一個後台管理功能時,通常都會在網站根目錄下建立一個「Backend」或「Admin」目錄,然後所有的後台管理功能頁就會全部放在這個目錄裡,而開發網站改使用 ASP.NET MVC 時,對於此技術不甚了解的朋友就會直接在 Controllers 目錄下去建立 Backend 子目錄並建立相關的 Controller 檔案(例如 AdminController.cs),至於 View 的部份就會選擇使用「手動」建立的方式直接在 Views 目錄下建立子目錄「Views/Backend/Admin」,而當執行時就會出現找不到檢視檔案或是無法執行的錯誤。

用 ASP.NET MVC 所開發的網站可以使用 Areas 技術,增加一個區域,然後把後台相關功能都放在這裡,除了後台功能可以使用 Area 外,也可以依照網站的功能不同,將不同的功能性質的網頁使用 Area 來做開發,例如會員中心也適合使用 Area 。

以下簡單說明怎麼在 ASP.NET MVC 使用 Area,這可是相當基礎的技術喔。

 


2013年7月4日 星期四

我的程式設計學習之路 Part.2

上一篇「我的程式設計學習之路 Part.1」是從我就讀專科時期接觸程式設計以及學習的過程,在文章裡也提到了我在專科時期對於程式設計是從一開始的一竅不通到之後的有了初步的認識,而專科的畢業專題則是使用 VB 4.0 來設計一個電腦教學輔助系統,聽起來好像蠻厲害的,在十多年前(將近 20 年前)是可以拿出來嚇唬別人,但其實整個專題的設計以及所呈現的結果還蠻糟糕的,因為完全純土法煉鋼的方式,電子工程科也沒有在教 VB,然侯專題成員也只有兩個人會寫程式,我跟另外一位同學,所以用了一整個學期所製作出來的成果充其量只能說是有做出東西,但是這個成果是無法端上檯面的,於是專科的生活就這樣迷迷糊糊地結束。

 


2013年7月3日 星期三

Team Foundation Service 使用 Git 與 TortoiseGit

這一篇將要來簡單介紹一下如何在 Team Foundation Service 使用 Git 做為版本控管的情況下,在一般的檔案總管內使用 TortoiseGit 來進行檔案的 Commit 與 Push。

 


2013年5月29日 星期三

我的程式設計學習之路 Part.1

這一篇純粹是個人學習感想文,雖然文章標題掛著「程式設計」好像是要教大家怎麼學習「程式設計」,But …… 我算哪根蔥,所以想要看這篇文章的方式來學習程式設計的話,可能會讓大家失望,其實這一篇比較像是回憶文或是嘮叨文,細說著我進入職場這 10 年以及在學期間學習程式語言的經歷,從專案中怎麼學習寫程式,怎麼讓觀念轉變,以及怎麼從 PHP, ASP 轉為 ASP.NET WebForms,最後再轉為 ASP.NET MVC,有興趣然後又不怕看密密麻麻又「落落長」的朋友,就請耐著性子看下去。

 


2013年5月28日 星期二

jQuery EasyUI DataGrid Checkbox 資料設定與取值

純粹做個記錄,以免日後忘記該怎麼設定。

這一篇將會說明兩種使用 jQuery EasyUI DataGrid 的 Checkbox 設定方式,以及在既有資料下將 checked 為 true 的該筆資料列的 Checkbox 設定為 Checked,另外就是兩種 Checkbox 設定方式下如何取得有勾選的資料。

 


2013年5月19日 星期日

ASP.NET MVC 與 ASP.NET WebForm 使用 Simple Injector 切換選擇不同 Repository 原始碼下載

將前面幾篇有關 Repository 分層以及使用 Simple Injector 的文章作為操作示範的 Solution 給做了整理,將一些程式內容做了點修改,然後為了可以讓下載的人可以開啟 Solution 後就可以執行,所以兩個 Web 專案加入了 LocalDB 的使用,姑且不論程式內容是不是寫得完整,主要是要讓大家了解其實資料存取的分層並不是只有限於 ASP.NET MVC 而已,而且同樣做好的 Repository 也是可以直接給 ASP.NET WebForm 來使用,並沒有所謂 ASP.NET MVC 與 ASP.NET WebForm 的 Repository 必須要分開寫的說法。

有關原始碼下載之後的使用與進階處理,就看文章內容的詳細說明。


2013年5月18日 星期六

ASP.NET WebForm 使用 Simple Injector 選擇不同的 Repository

這一篇也是延續文,主要是延續上一篇「ASP.NET WebForm 使用分層的 Repository 類別庫專案」,而架構一樣沿用之前 ASP.NET MVC - Model 系列文章的 Repository 分層架構,如下:

ASP.NET MVC 的 Model 使用 ADO.NET

ASP.NET MVC 的 Model 使用 Enterprise Library 6 Data Access Application Block

ASP.NET MVC - 使用 Simple Injector 讓 Model 三選一

既然 ASP.NET MVC 可以使用 Simple Injector 選擇不同的資料存取方式,而前面文章也討論過可以將 ASP.NET MVC 所使用的分層讓 ASP.NET WebForm 網站來使用,所以同樣地也可以讓 ASP.NET WebForm 網站透過 Simple Injector 來選擇不同的資料存取方式,而不用去大幅更改到原本的網站程式。

這一篇不打算廢話太多(我哪一篇文章的廢話有少過咧),就請各位仔細看清楚文章的程式內容。

 


2013年5月14日 星期二

Entity Framework 更新時出現「ObjectStateManager 中已經有具有相同索引鍵的物件。ObjectStateManager 無法追蹤多個具有相同索引鍵的物件。」錯誤

今天一位朋友寫信向我詢問有關「ObjectStateManager 中已經有具有相同索引鍵的物件。ObjectStateManager 無法追蹤多個具有相同索引鍵的物件。」的問題,他看了我的「分層架構」系列文章後也動手實作練習,然後就在要更新資料並且執行 GenericRepository 的 Update 方法時就出現了錯誤。

這個錯誤的發生無關分層也無關使用 Unity bootstrapper for ASP.NET MVC 或其他 IoC Container,甚至也跟因為使用 IoC Container 而修改 GenericRepository Constructor 是沒有關係的,接下來就稍微跟大家說一下是怎麼一回事,然後怎麼解決這個問題。

 


2013年5月13日 星期一

ASP.NET WebForm 使用分層的 Repository 類別庫專案

這一篇的內容是延續前三篇文章的架構內容:

ASP.NET MVC 的 Model 使用 ADO.NET

ASP.NET MVC 的 Model 使用 Enterprise Library 6 Data Access Application Block

ASP.NET MVC - 使用 Simple Injector 讓 Model 三選一

只不過 Web 專案要換成 ASP.NET WebForm,因為當初在公司內部教育訓練時,公司其他同事都沒有 ASP.NET MVC 的開發經驗,雖然其中一位同事還買了保哥的書,但從來沒看見他翻開來看過,所以在講 ASP.NET Model 的時候就是先說明 ADO.NET 來做為 ASP.NET MVC Model 的內容,再進而介紹 Enterprise Library Data Access Application Block 與 ADO.NET Entity Framework,但公司主要的開發還是以使用 ASP.NET WebForm 為主,雖然短時間內公司不會使用 ASP.NET MVC 來開發新案,但至少可以有一些觀念與作法可以帶到開發 ASP.NET WebForm 時可以使用,所以就沿用既有已經開發好給 MVC 網站專案使用的 Repository,讓同事們了解先定義好 Domain 物件類別、定義介面、實作介面、套用在 Web 專案上,這一系列的作法不會因為開發 MVC 或是 Web 而有任何的差異,差異只有在 Web 專案裡的作法而已。

再來就是有位朋友在「ASP.NET MVC 的 Model 使用 ADO.NET」這篇文章提出問題:

image

雖然這個系列的文章並非三層架構,但還是做到將資料存取這個部分給抽離出 Web 專案,而且這樣的作法不管是在 ASP.NET WebForm 或 ASP.NET MVC 都可以使用。

 


2013年5月12日 星期日

ASP.NET MVC - 使用 Simple Injector 讓 Model 三選一

前面兩篇有關 ASP.NET MVC Model 的文章向大家說明使用 ADO.NET 來處理 Model 的資料存取操作,還有如何使用 Enterprise Library 6 Data Access Application Block 來輔助並強化傳統 ADO.NET 資料存取的操作,

ASP.NET MVC 的 Model 使用 ADO.NET

ASP.NET MVC 的 Model 使用 Enterprise Library 6 Data Access Application Block

這一篇的內容在文章標題就說得很清楚了,在這篇文章裡要向各位說明如何使用 Simple Injector 這個 DI/IoC Container 來讓 ASP.NET MVC 網站可以抽換不同的資料存取方式,這篇文章會再加上大家比較常見的 ADO.NET Entity Framework,藉由使用 Simple Injector 來達到網站選用三種不同資料存取方式的需求。

 


2013年5月11日 星期六

ASP.NET MVC 使用 MvcPaging 在 View 出現錯誤?!

在 MSDN 論壇裡有一則提問是有關在 ASP.NET MVC 裡透過 Nuget 加入 MvcPaging 後,卻在 View 頁面裡出現錯誤,出現的錯誤是說在 View 裡面使用 IPagedList 以及 Html.Pager 都會出現紅字,而提問內容點到了我這小部落格,所以我必須勇敢地出來面對問題……(人不是我殺的呀!

我在「資料分頁」的系列文章裡面有在第一篇文章「ASP.NET MVC - 資料分頁(1) 使用MvcPaging」裡做了比較完整的加入 MvcPaging 說明,其餘文章都是在這第一篇文章的基礎之上做變化,而該篇文章發佈當時雖然 ASP.NET MVC 3 已經 Release 一段時間了,不過文章內的 View 還是使用 WebForm ViewEngine,有可能就這樣讓很多朋友疏忽了這個部分,那麼就用這篇文章來做個交代吧。

 


2013年5月10日 星期五

ASP.NET MVC 的 Model 使用 Enterprise Library 6 Data Access Application Block

上一篇「ASP.NET MVC 的 Model 使用 ADO.NET」向大家說明 ASP.NET MVC 的 Model 不一定非要使用 ADO.NET Entity Framework,也是可以使用一般的 ADO.NET 來處理向資料庫存取的部分,我必須老實跟大家說,我很少直接使用 ADO.NET 來處理資料存取的操作,如果專案不使用 ADO.NET Entity Framework 這類的 ORM Solution 時,我就會使用 Enterprise Library Data Access Application Block 來處理資料的存取操作。

EntLib DAAB 一樣也是在 ADO.NET 的基礎上,並不像 ADO.NET Entity Framework 是一種有別於 ADO.NET 完全不同的開發方式與觀念,EntLib DAAB 一樣是使用 DbCommand, DataReader, DataSet, DataTable 等,一樣要給 SQL Statemet 或是 Stroed Procedure 名稱等等,只需要改變一些程式的寫法,就可以夠過使用 EntLib DAAB 讓處理資料時可以更加方便。

這篇文章就以「ASP.NET MVC 的 Model 使用 ADO.NET」的架構內容繼續做開發,因為有建立 Domain 類別、Repository 介面,所以只需要另外增加一個類別庫專案,然後在 Web 專案中將原本的 Sample.Repository.ADONET 做替換,如此就不需要去更動到原本的 Sample.Repository.ADONET 內容,ASP.NET MVC Web 專案也只需做小部分的調整就可以讓 Model 使用到不一樣的資料處理方式。

 


ASP.NET MVC 的 Model 使用 ADO.NET

前幾天在公司做 ASP.NET MVC 的教育訓練,因為公司的 .NET 程式設計師大多沒有在既有的專案去導入使用 ADO.NET Entity Framework,所以在講述 ASP.NET MVC 的 Model 時,如果還是以 ADO.NET Entity Framework 為主來說明 Model 這一個部分的話,應該會讓聽的人感到無所適從,因為沒有實際用在專案開發上,就會感到不熟悉,而在 ASP.NET MVC 的學習過程就會有所阻礙,然後去排斥,這就不是我所期待的結果。

ASP.NET MVC 的 Model 並不是只能使用 ADO.NET Entity Framework。

但是很多想學習 ASP.NET MVC 的朋友無論在書裡或是官方網站的教學課程裡,甚至是網路上的教學文章,包括我這個小部落格裡大部分有關 ASP.NET MVC 的文章中,Model 這部份都是採用 ADO.NET Entity Framework,以致於很多人就有個詭異的觀念「ASP.NET MVC 的 Model 就是一定要用 ADO.NET Entity Framework 」,其實 ASP.NET MVC 的 Model 並不等同於 ADO.NET Entity Framework,只是 EF 是微軟官方所主推的 ORM Solution,所以在官方的教學課程裡大部分就只會看到 Model 採用 EF,而 ASP.NET MVC 強調強型別的使用,在 Controller 與 View 裡就能夠感受到強型別的優點,所以大部分有關 ASP.NET MVC 的書籍與文章都比較少去講 Model 使用非 ORM Solution 的內容。

其實 ADO.NET Entity Framework 本身也是架構在 ADO.NET 基礎上,底層還是使用了 ADO.NET,只是說 EF 幫我們做了很多事情,讓我們在寫程式的時候可以使用 LINQ 語法來做資料的存取操作等處理,不需要在去考慮到怎麼下 TSQL 來存取資料以及取資料後要放 DataReader or DataTable or DataSet or else 等等,現在大部分的 ASP.NET 程式設計人員在存取資料還是會使用 DataSet, DataTable 等弱型別的資料集合物件,其實使用這些弱型別資料集合物件並不是很方便,程式裡有很多地方都要去處理資料的型別轉換,但這種資料處理還是以 Database 的 Table 概念來思考的方式,很難將同樣的觀念與作法應用在 ASP.NET MVC 的開發上,然後就時常會聽到很多 ASP.NET WebForm 的開發人員在抱怨 ASP.NET MVC 很難,或是開發 ASP.NET MVC 時會想盡辦法的把以前開發 WebForm 的習慣帶到 MVC 上。

前言講了這麼多無非是要跟大家說開發 ASP.NET MVC 時不要有太多的包袱,如果開發 ASP.NET MVC 不想用 ADO.NET Entity Framework 的話,也是可以使用傳統 ADO.NET 的,ASP.NET MVC 架構對於用來建置 Model 並沒有任何特殊限制。

 


2013年5月7日 星期二

EntLib Data Access Application Block + Oralce 出現「只接受非 Null 的 OracleParameter 型別物件,不接受 OracleParameter 物件」錯誤

文章標題很長,但主要是要記錄出現「OracleParameterCollection 只接受非 Null 的 OracleParameter 型別物件,不接受 OracleParameter 物件。」這個錯誤時的解決方式,這是出現在專案使用 Enterprise Library Data Access Application Block 存取 Oracale 資料庫的情況,同樣的存取方式如果是換成是對 MS SQL Server 做存取時就不會有問題,而對 Oracle 資料庫存取時就必須要使用另一種方式來解決。

錯誤畫面:

image

 


2013年5月1日 星期三

ASP.NET Ajax Control Toolkit - April 2013 Release 更新功能:AjaxFileUpload

最近很多更新,上週是 Enterprise Library 6 的更新發佈,而這一週讓我注意到的是 AJAX Control Toolkit 的更新,這一次的 AJAX Control Toolkit 更新日期為 2013-04-30,改善了兩個的 AJAX 控制項,分別為:AjaxFileUpload 與 MaskedEdit,尤其是 AjaxFileUpload Control,相信這一個功能解決了許多 ASP.NET 開發人員長久以來的問題,雖然說檔案上傳的第三方套件很多,但有些會受限於 jQuery 與 Postback 的整合,大多 ASP.NET 開發人員看到 jQuery 都是先退後三步(或是說 jQuery 不好、影響效能等等之謬論),不過 ASP.NET 官方在 May 2012 Release 之後,讓開發人員可以直接使用官方的 AJAX 上傳檔案控制項,並且可以與原本的 HtmlEditorExtender 做整合。

雖然說我這邊主要關注 ASP.NET MVC 的開發,但畢竟工作上還是得要面對 ASP.NET WebForm,雖然現在已經很少會去用到 Ajax Control Toolkit 的控制項,但是對於 ASP.NET 開發有幫助的控制項是不會放過的。

 


2013年4月28日 星期日

讓專案透過 NuGet 安裝 Enterprise Library 5.0 - Data Access Application Block

我想很多人看到文章標題之後一定都會說,這有什麼難的嗎?這值得寫一篇文章嗎?

再看一下文章標題,我要說的是「EntLib DAAB 5」而不是最近才剛發佈的「EntLib 6」,的確,在 Enterprise Library 6.0 Release 之前,這實在是不必專門寫一篇文章來說明,但就在 EntLib 6 正式發佈之後就有點不一樣了,還是有些事情要說明一下,不然一定會有很多人撞牆的。

 


2013年4月27日 星期六

ASP.NET MVC 4 使用 Unity bootstrapper for ASP.NET MVC

上上一篇分層架構系列文章「ASP.NET MVC 專案分層架構 Part.6 - DI/IoC 使用 Unity.MVC」 介紹了如何在一個 ASP.NET MVC 4 的分層架構專案中使用 Unity.MVC4 實作 DI/IoC,不管是 Unity.MVC3 or Unity.MVC4 都是使用了 Enterprise Library Unity Application Block 2.1 版 ( Unity.MVC3 為 2.1.505.0, Unity.MVC4 為 2.1.505.2 ),然而就在 2013-04-26 的時候 Enterprise Library 6.0 正式 Release 了,而 Unity Application Block 也進展到 3.0 版。

此次 EntLib 6.0 增加了兩個 Application Block,而既有的 Application Block 也有很多的更新功能,而其中一點就是 Unity Application Block 加強了對 ASP.NET MVC 與 ASP.NET Web API 的技術整合,另外也推出了自家官方的 ASP.NET MVC, ASP.NET Web API 整合組件,在 NuGet 就可以取得、安裝,這一篇就用之前分層架構的程式來介紹如何在 ASP.NET MVC 4 網站裡使用 Unity bootstrapper for ASP.NET MVC

 


2013年4月24日 星期三

Visual Studio 2008 增加 HTML5 與 CSS3 的支援

今天同事突然問起我這個問題,怎麼讓 VS2008 增加 HTML5 與 CSS3 的支援?

老實說,我聽到的時候是楞了一下,因為會以 VS2008 開發的專案是比較早期的,所以不會在早期的專案中使用到 HTML5 與 CSS3,而我自己的電腦早就沒有安裝 VS2008 了(公司的電腦裡還存在著 VS2003……),自己開發專案的時候初非必要,不然也都是選用 VS2012 為優先,VS2010 與 VS2012 都可以使用 HTML5、CSS3,在預設的情況下,VS2008 並沒有 HTML5、CSS3 可以使用,也不像 VS2010 or VS2012 有擴充功能可以增加通能套件,不過在 Google 上面搜尋一下相關的資訊,還蠻多篇是介紹如何解決這個問題,這邊就記錄一下怎麼讓 VS2008 增加 HTML5 與 CSS3 的支援。

 


2013年4月14日 星期日

ASP.NET MVC 專案分層架構 Part.6 - DI/IoC 使用 Unity.MVC

2014-12-02 補充說明:
這一系列的文章並不適合初階及中階的開發人員,如果你是程式開發的初學者或是 ASP.NET MVC 初學者,甚至是開發經驗少於兩年的開發人員,請馬上離開此篇文章。

隔了好長一段時間沒有接續這個系列的文章,現在直接從 DI/IoC  來繼續專案分層架構的主題,有關在專案裡實作 DI/IoC 的 Framework 有相當多,例如:Autofac, Castle Windsor, StructureMap, Ninject, Simple Injector, Enterprise Library Unity Application Block 等,其實還有很多的 Framework 可以使用,但這邊並不是探討哪一種 Framework 的優劣,這些 DI/IoC Framework 都相當不錯而且也有很多人使用,在網路上也可以找到豐富的文件以及參考文章,而這篇文章則是使用「Unity.MVC4」。

DI:Dependency Injection 依賴注入.
IoC:Inversion of Control 控制反轉.

P.S.
其他 DI/IoC Framework 的使用則會另開文章來做介紹,就不是隸屬於「分層架構」的分類中。

 


2013年4月13日 星期六

ASP.NET MVC 讓 jQuery Validation Plugin 動態切換顯示訊息語系

上一篇「改變 jQuery Validation Plugin 預設訊息的語言 (localization)」介紹了如何讓 ASP.NET MVC 網站內使用 DataType Attribute 的屬性於前端頁面驗證時可以顯示正體中文訊息,而非預設顯示的英文訊息,在該篇文章當中也提到了多語系的應用,所以這一篇就來說如何讓 ASP.NET MVC 於切換語系的時候也讓 jQuery Validation Plugin 的預設顯示訊息也隨著語系的切換來做改變。

P.S.
本篇並不會完全實作全網站的多語系資源設定(App_GlobalResources),先把關注點放在怎麼讓 jQuery Validation Plugin 的眼正顯示訊息可以隨著語系的切換而作變化。


改變 jQuery Validation Plugin 預設訊息的語言 (localization)

在點部落看到一篇有關於 ASP.NET MVC 的文章是說明怎麼讓 DataType.EmailAddress 的錯誤訊息顯示中文,作者將自己的發現與嘗試給寫出來並且讓大家分享,我十分認同這樣的作法,因為我自己也是這麼做的,各位看到的這個部落格裡的文章幾乎都是這樣的方式產生的,既然是研究與嘗試,那麼就一定會有一些錯誤或是可以再加強改善的地方,所以我也常常收到很多朋友給予我的任何回應,而藉由這樣的回應讓我得以了解我還有哪些的不足以及需要改進的地方。

再回到剛剛我所提到的那篇文章,我看到那篇文章的內容後,其實原先的作法也是可以,但是那樣的修改是種硬修改的方式,這樣的修改除非之後不會有任何因為更新版本或是其他原因而去影響,我盡量不會去對原本的第三方 JS 原始碼去做任何的變動,而我也知道 jQuery Validation Plugin 這樣的前端套件為了擴充性以及應用在多國語言環境上,所以是有提供各種語言的 Message 擴充文檔,讓有需要的人可以取用適合自己語系環境的文檔並應用在系統當中,其實這樣的作法在很多的前端套件中都有,有需要的話可以到這些前端套件的官方網站或是存放的 GitHub 網站裡去找找,而 jQuery Validation Plugin 有提供正體中文版的 Message 文檔,這些語言文檔也通常都是各國熱心網友所提供的,我以前也曾經提供正體中文的文檔給某個前端套件過。

又離題了,再回到剛剛我所提到的那篇文章,我看了那篇文章的作法後,我就回應了 jQuery Validation Plugin 的正體中文 Messages_zh_TW.js 給作者,而該文作者之後也做了一些修改,我這邊也分享一下我所做的應用方式,然後下一篇文章再介紹可以進階應用的方式給大家。

 


2013年4月10日 星期三

AutoMapper 的設定 (Configuration)

上一篇「使用 AutoMapper 處理類別之間的對映轉換」像各位說明在系統中可以使用 AutoMapper 來處理類別之間的轉換,例如:Entity Model to DTO, DTO to Entity Model, Entity Model to ViewModel, ViewModel to Entity Model … etc.

應該有人會覺得每次要使用 AutoMapper 處理類別轉換的時候總是要先建立類別轉換的設定,然後再執行轉換,如果同樣的類別轉換設定會在不同地方出現時,豈不是每次都要重複建立嗎?比如說以下的這個設定:

image

這一篇就跟大家說明如何處理 AutoMapper 的設定。

 


2013年4月5日 星期五

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

以往使用傳統 ADO.NET 方式對資料庫存取資料時都會碰上資料對映的處理,這是指已經在系統中使用物件導向開發的情況(而沒有使用物件導向的程式中大多是不會遇到這個問題),當從資料庫取得資料後為了要對映到我們所定義的類別,如果沒有使用輔助方法的話,很多人都是乖乖地在程式中去將一筆筆的資料做迴圈處理,然後再一個欄位對映到類別指定的屬性,因為這樣一筆一筆地對映實在太花時間了,所以就有很多輔助方法的產生,有些人會自己寫,而我則是使用 Enterprise Library Data Access Application Block 裡的 RowMapper 方法,在我之前的文章也曾經介紹過,如下:

簡述 Oracle + Enterprise Library 5.0 Data Access Application Block 的操作
Entity Framework 與 Stored Procedure - 回傳多種資料集

而 Microsoft MVP - 91 也曾經發表了他所設計的 RowMapper 模組「[.NET]RowMapper模組」「[.NET]透過 T4 產生對應 DB table 的 entity」,都是用在資料與類別對映的處理上。

而到了完全以物件導向開發的時候,尤其是已經在專案中使用 ORM Solution,如:ADO.NET Entity Framework or nHibernate 等,大多都是資料庫的 Table 對映到專案的類別,這一段的對映處理不必由我們動手做,在大部分的專案開發上都是一個類別用到底,但有些專案開發時會因為需求而產生了 一些類別,這些類別的屬性可能來自不同的原生類別,而在 ASP.NET MVC 裡最常碰到的就是 ViewModel 類別,而處理這些類別的對映,又遇到上面我所描述過的狀況,如果沒有使用輔助方法的話,又需要一筆一筆資料去做對映,但只少比一般 ADO.NET 的對映處理已經是方便許多,而 AutoMapper 就是可以幫我們簡化這種類別之間的對映轉換處理,讓程式在處理時可以更加簡易也可以更加優雅些,也可以省下更多的開發時間;接著就來讓我簡單介紹怎麼使用 AutoMapper。

 


2013年4月4日 星期四

Sublime Text 2 - Find Function Definition 移到方法定義

會寫這篇的起因是這樣的,

image

Eclipse 並不是我的開發工具,所以我不清楚,不過對比到我主要的開發工具「Visual Studio」上面的功能,例如在 C# 程式中,在程式中對使用的方法或是變數按下 F12 或 Shift + F12 就可以移到定義或是找出哪些程式有使用變數或方法,VS2010 只能對 C# 或是其他 Server 端語言才能使用這樣的功能(或是安裝第三方工具後也會有這樣ˇ功能),而到了 VS2012 除了 Server 端語言有這樣的功能外,也開始支援在 Javascript 程式裡有這樣尋找定義的功能,在 Sublime Text 2 也是有類似的 Package「Find Function Definition」。

 


2013年4月2日 星期二

Telerik OpenAccess ORM 與 Stored Procedure - 回傳多種資料集

前幾篇文章都圍繞著 Entity Framework 與 Stored Procedure 打轉,而上一篇則是討論到回傳多資料結果時在 Entity Framework 的處理方式,最後我還是回歸到使用 ADO.NET 的方式來處理,雖然最後是有提到有一篇國外文章有說明可以去修改 EDMX 檔案內容讓 Entity Framework 可以直接處理 SP 所回傳的多資料結果,但去修改 EDMX 內容實在有太大的風險,而且算是一種非正式的處理方式,所以我選擇不採用。

而在網路上找尋相關解決方案的時候,我看到了 Telerik OpenAccess ORM 可以處理這種 SP 回傳多資料結果的方法,再加上 Telerik OpenAccess ORM 是免費的,而且設定與使用方式跟 Entity Framework 大致相同,在使用過 Telerik OpenAccess ORM 來解決這個處理後覺得有些案子是可以考慮使用它。

這一篇就從一開始在專案中加入使用 Telerik OpenAccess ORM,然後加入 Model 與 Stored Procedure,最後再使用 Telerik OpenAccess ORM 所提供方法來完成這個回傳多資料結果的處理。

 


2013年3月31日 星期日

Entity Framework 與 Stored Procedure - 回傳多種資料集

前面兩篇講的是 Entity Framework 與 Stored Procedure 的基本 CRUD 操作,那麼這一篇就來個進階一些的處理,以往直接使用 ADO.NET 執行 Stored Procedure 在遇到回傳多個資料集的時候, 可以使用 DataReader 的 NetResust 方法來處理,通常這種 Stored Procedure 回傳多種資料集會是在 Master - Details 的情況,例如訂單與訂單明細,而換成 Entity Framework 的時候,是不是可以在執行後就可以讓我們直接得到兩種型別的資料呢?

讓我們看下去 ……


Entity Framework 與 Stored Procedure - Insert, Update, Delete

上一篇「Entity Framework 與 Stored Procedure - 基本的 Select」先以最基本的 Select 讀取資料的操作來介紹 Entity Framework 透過 Stored Procedure 取得資料,而除了讀取資料外,對於資料的操作也包含了新增、修改、刪除,而這一篇就來介紹 Entity Framework 透過新增刪除修改的 Stored procedure 來執行資料的處理。

 


2013年3月30日 星期六

Entity Framework 與 Stored Procedure - 基本的 Select

在企業裡,使用 Stored Procedure (以下簡稱 SP) 相當尋常,常常會看到有為數不少的 SP 在資料庫裡頭,而這些 SP 裡面的 T-SQL 內容是各式各樣,相信有許多朋友見過的 SP 一定是比我還要多,早期有些企業因為要避免過多的 SQL Statement 在程式中出現,所以會將程式中所需要執行操作的 SQL Statement 給移到資料庫裡然後建立 SP,然後再讓程式透過 ADO.NET 或是其他方式來執行,還有一種就是某些資料的存取有一定的規則,而這些為了要統一管理這些規則而避免各個系統有自己一套的處理方式,所以會把資料存取的方式給統一建立 SP,然後各系統在去透過這些 SP 來存取資料,另外還有的就是有些資料的存取是必須要在資料庫裡頭來做,所以建立 SP 來做處理,當然還有很多其他的原因。

現在很多企業很少有專責的 DBA 來管理資料庫(其實在我的工作經歷中,也只有一家公司有這樣的編制也真的有這麼一位 DBA),大多是程式設計師也必須要兼任 DBA 的角色,也因為如此,很多個開發人員也都可以使用到公司裡的資料庫們,這樣也導致一個 DB 中的 SP 會有很多開發人員去使用與維護,經常發生的就是原本運作好好的 SP 會突然無法正常使用,這樣的狀況很多都是 SP 被別人做了修改,而另一種情況就是 DB 裡有多個 SP 的內容都是做一樣的事情,但卻會有很多分身,然後名稱都不同但有很類似,甚至於有些 SP 的內容看起來已經是沒有在使用了,但又不感冒然移除,深怕移除之後讓某個古董級系統產生異常而無法運作。

以上這些都是目前很多企業在使用 SP 的現狀,SP 的內容也是程式,但偏偏很少有去做管理或是做版本控制,導致 DB 內的 SP 隨著時間的推移而越來越多,等到哪一天資料庫要更新版本或是出了狀況時,這些 SP 就讓人相當頭大。

一開始就說了一堆看似與主題無關的內容,但也說明了過多以及過度使用 SP 對於系統開發的影響,我個人是不反對使用 SP,因為有些資料的處理並不適合放在程式中,但我反對過多的商業邏輯放在 SP 裡面去處理,每個系統的商業邏輯不盡相同,所以就必須將商業邏輯給放在個系統的程式裡做處理,在需求變動的情況下,也只要去修改系統的程式即可。

而已經使用 Entity Framework 開發的系統通常很少會再去跟資料庫裡的 SP 打交道,但是有時候是無法避免要跟 SP 做接觸,此時就必須要學習怎麼透過 Entity Framework 去跟這些 SP 溝通。

 


2013年3月28日 星期四

LINQPad - IQ Driver - for MySQL, SQLite, Oracle

LINQPad 相當好用,我已經用了很多篇文章來說明 LINQPad 的使用,一般使用 MS SQL 或 MS SQL Express 的開發人員通常在 LINQPad 裡是比較不會感覺到不便,一旦當你開發的專案是使用非 MS SQL 的資料庫時,通常在開發機裡有安裝了相對應的 Data Provider 之後就不會有無法在 LINQPad 裡使用的問題,但如果再一台沒有安裝相對應 Data Provider 的時候,就無法在 LINQPad 裡去對這些資料庫進行 LINQ 查詢操作了。

不過這個問題之前就有了解決的方式,可以讓我們不必安裝相對應的 Data Provider 的情況下還是可以在 LINQPad 裡進行查詢操作。

 


2013年3月26日 星期二

ASP.NET MVC - 使用 jQuery Form Plugin 做檔案上傳之加點東西

標題取得很弱… 因為這篇的內容要說是補充也不是,說進階也不太算,要說加強的話也沒有強到哪裡去,所以就說是「加點東西」,也真的只是加了一些內容:

  • 修正上一版本在 IE 瀏覽器所出現的 JSON 問題
  • 上傳前的檢查
  • 上傳時的效果

 


2013年3月24日 星期日

ASP.NET MVC - 使用 jQuery Form Plugin 做檔案上傳

之前曾經介紹過使用 file-uploader 來做 Ajax 的檔案上傳,而 file-uploader 也有了改版,有時間在找機會寫一下這個新版的 file-uploader,在 ASP.NET MVC 我們使用 file-uploader 可以完成 Ajax 的檔案上傳功能,但是要做的設定以及所需要了解的東西不算少,所以一些前端技術不是很熟練的朋友就會有些障礙,而能夠完成 Ajax 檔案上傳的也不是只有 file-uploader 還有很多前端套件可以替代,但是找來找去有很多都是會使用 flash 技術來完成,我對 flash 並沒有什麼成見,只是能不用就不用,而這一篇就來介紹使用 jQuery Form Plugin 這個前端套件來完成檔案上傳的功能。


2013年3月20日 星期三

給 ASP.NET MVC 初學者 - 兩種主要 View Engine 的對照

現在開發 ASP.NET MVC 網站的 View 主要都已經是用 Razor View Engine,Razor View Engine 是 ASP.NET MVC 3 發表時所推出的,而 ASP.NET MVC 一開始出來的兩個版本主要是 WebForm View Engine,就是使用 <% … %> 的方式,其實 ASP.NET MVC 的 View Engine 一開始並不只有 WebForm View Engine 而已,其實還有很多種但畢竟不是官方所推出的,所以就沒有受到太多人的關注(例如還有:Spark, NHaml, Brail, NDjango,  或是你也可以自己寫一個,詳見「ASP.net MVC 4 網站開發美學 Chapter 8-3」)。

而在 ASP.NET MVC 3 發表後,Razor View Engine 因為簡潔以及方便、容易使用的特性而使得 Razor View Engine 變成開發 ASP.NET MVC 網站的主流,如今在網路上所找到的 ASP.NET MVC 相關資訊的範例程式,在 View 的部份大多使用 Razor,而 WebForm View Engine 就比較少了,以致於這一兩年初學 ASP.NET MVC 的朋友大多不識 WebForm View Engine 的寫法,甚至於看到用 WebForm View Engine 所編輯的 View 就無法轉換為 Razor View Engine 的寫法,所以這篇就跟大家說一個最簡單的方法來比較兩種 View Engine 的寫法。

 


2013年3月16日 星期六

ASP.NET MVC - 不使用 HttpPostedFileBase 處理檔案上傳

上一篇「ASP.NET MVC - 檔案上傳的基本操作」說明了在 ASP.NET MVC 檔案上傳的基本處理方式,並且在文章的最後也提到了 Controller 的 Action() 方法在處理由前端所傳過來資料處理的不同,一般表單輸入的資料是從 FormCollection 來取得,因為 FormCollection 繼承 NameValueCollection 為 String 索引鍵與 String 值的集合,而檔案上傳並非單純的 String 值,所以上傳檔案其 default value provider 是由 HttpFileCollectionValueProvider 類別,這就說明了為何在 FormCollection 裡是找不到上傳檔案的原因。

然而之前碰到有人遇到這麼一個狀況,因為在不知道前端上傳檔案時所使用 File Upload Input Tag 所設定的 Name 為何,所以無法在後端明確的在 Action () 方法中使用 HttpPostedFileBase 來處理上傳檔案。

必須說這樣的狀況蠻特殊的,但也並非沒有任何的解決方式,在這篇文章當中就來研究看看如何解決不使用 HttpPostedFileBase 的情況下處理檔案上傳。

 


2013年3月15日 星期五

ASP.NET MVC - 檔案上傳的基本操作

做網站系統多半都會有檔案上傳的需求,而我也在 2012 年用了四篇文章的篇幅介紹如何使用「file-uploader」這個前端套件來完成一個檔案上傳的功能,

ASP.NET MVC上傳檔案,使用file-uploader : 基本操作
ASP.NET MVC上傳檔案,使用file-uploader : 進階操作 Part.1
ASP.NET MVC上傳檔案,使用file-uploader : 進階操作 Part.2
ASP.NET MVC上傳檔案,使用file-uploader : 進階操作 Part.3

不過這一系列的文章有使用「file-uploader」這個前端套件而且在後端的 Controller Action 操作也比較進階,並不適合給初學者參考,所以這邊整理一下有關 ASP.NET MVC 的檔案上傳基本操作方法。

 


2013年3月13日 星期三

ASP.NET MVC - LowercaseRoutesMVC 讓網站的 URL 輸出為小寫

在 SEO 對於 URL 的討論中,有部分的人是覺得網頁的 URL 大小寫對於 PageRank 是有影響,而有些人是說對於非使用 IIS 網頁伺服器的網站其 URL 的大小寫才會有影響,對於我來說,其實有關於 URL 大小寫與 SEO 的關係對於我來說並不是那麼清楚,但為何又要介紹這個套件呢?

其實我們開發 ASP.NET MVC 網站很少會注意到 URL 大小寫,多半我們都是在注意網頁執行的正確以及使用者是否輸入正確的 URL,但如果今天被客戶要求需要將網站內所產出的 URL 都一律使用小寫時,那麼 LowercaseRoutesMVC 這個套件就派上用場了,這邊就來介紹這一個套件。


2013年3月10日 星期日

使用虛擬機器測試不同版本的 IE 瀏覽器

開發網站需要面對多種瀏覽器,上一篇文章有提到過,早期頂多測試兩種瀏覽器就可以,但隨著作業系統與裝置的多元發展,瀏覽器也多了很多種、很多版本,所以開發網站就必須要測試很多種的瀏覽器與及不同環境,上一篇「推薦一個值得試試的服務 - BrowserStack」介紹了 BrowserStack 這個服務可以讓我們在開發網站時可以方便及輕鬆地在多種環境、瀏覽器做測試及偵錯。

但是這樣的服務存在著幾個問題,首先就是這個服務是需要付費的,而且費用雖然說不貴,但一年也是需要 6000 多台幣,如果是真的相當需要這個服務的開發人員來說,這樣的費用其實不算太貴,但是對於使用量不多到或只是偶而會需要用的開發者來說這是一筆不少的費用;而另一個問題就是這樣的服務是需要網路的,沒有網路就沒辦法使用,尤其是對於一些網路資安相當重視的工作環境來說,要使用這樣的線上服務是有困難的。

其實有很多網站開發在非 IE 瀏覽器並不會有太大的問題,而有問題的通常都會發生在 IE 瀏覽器,並不是說 IE 瀏覽器不好,而是 IE 每個版本所發生的問題都不太一樣,甚至於會有特定版本的專屬問題,尤其是在台灣,很多網站開發者不得不面對的就是客戶一定會要求網站在某個版本的 IE 瀏覽器上必須要可以正常執行且無錯誤發生,如果制式只是需要測試不同版本的 IE 瀏覽器,實在是不需要花錢去使用 BrowserStack,而這樣的情況下,最多人所採用的方法除了使用 IE Tester or IE Collection 強調可以測試不同版本 IE 的工具來測試網站,但這個方式往往會因為開發人員所使用作業系統的不同或是環境不夠單純而無法實際測試出客戶所遇到的問題,當出現這種情況時,我都會建議開發人員使用虛擬機器的方式,並準備不同作業系統且安裝不同版本的瀏覽器,當問題來的時候就可以依據以最單純的環境來做測試以找出問題。


2013年3月7日 星期四

推薦一個值得試試的服務 - BrowserStack

現在開發網站時所遇到的瀏覽器比起以往是多了好幾倍,早期大多數的網站開發人員只需要測試兩種瀏覽器就好,分別是 IE 以及 Firefox,Apple OS X 作業系統越來越多人使用後,就需要多增加測試 Safari 瀏覽器,而後 Chrome 瀏覽器在 Google 大力推廣下,又多了一個要測試的瀏覽器,這些瀏覽器的更新也越來越頻繁,每一種版本都還會有人使用,而不會因為版本的推進而隨之更新,這樣的情況在 IE 瀏覽器最常見,因為有太多的網站必須要能夠在某些版本的 IE 瀏覽器上被正確的執行,所以網站開發人員在開發的時候就要針對 IE6, 7, 8 多加留意也需要多花時間做測試。

在這些不同版本的瀏覽器做網站的測試是需要相當耐心的一件事,早期還必須要準備好幾台電腦,分別安裝不同版本的作業系統與瀏覽器,如此才能夠有實際的測試結果,到後來就可以使用 Virtual Machine 的方式在開發者的電腦裡準備不同的測試環境,但大多數開發者所使用的電腦等級是無法同時開啟多個 VM 來做測試,所以網站開發時要在不同作業系統、瀏覽器做測試還真的是挺麻煩的,尤其現在還必須再增加對於行動裝置的測試,這對於很多開發人員就是一種負擔。

不過在不久前經由 Scott Hanselman 的部落格文章發現到一個線上服務可以讓我們以更輕鬆、方便的方式來達到不同作業系統、瀏覽器、瀏覽器版本的網站測試,除了一般的瀏覽測試之外,也可以與 Visual Studio 2012 整合,在偵錯時就可以使用這項服務做 local 端的測試,這麼好的一個服務可以減輕開發人員的負擔,所以介紹給大家。

 


2013年3月3日 星期日

ASP.NET MVC 學習資源整理 Part.3 - 書籍 (Books)

好一陣子沒有繼續這個學習資源系列的整理,先簡單介紹之前兩篇學習資源的文章,

ASP.NET MVC 學習資源整理 Part.1
這一篇的內容是在介紹官方學習資源,如何從微軟的官方網站中取得 ASP.NET MVC 相關的學習教程、範例程式與 Tarining Kit。

ASP.NET MVC 學習資源整理 Part.2 - 國外部落格
這一篇的內容是列出九個國外著名的 ASP.NET MVC 部落格,程式開發不能單從一個地方來學習,還需要從許多地方來做充實,而這些國外著名大神的部落格就是最好的學習資源,不光是基礎程式教學或是進階程式技巧,還不時會有最新技術的發表與介紹,所以除了官方網站的資源之外,最好的學習資源就是國外部落格。

兩篇文章介紹了這麼多的線上學習資源但我也明白一定會有很多人是無感的,畢竟也是有很多人對於在電腦上做技術學習這件事是存在著一種障礙,所以很多人學習程式語言或是其他 IT 技術都還是習慣「看書學」,不瞞各位我也是,以往我習慣看書來學習,直到現在也是如此,,但現在線上學習資源越來越多的情況下,也漸漸地習慣使用線上教學來學習新技術,看書學技術就不再是唯一的途徑,拿著實體書籍學習還是有其好處,例如可以在書本上做註記、畫重點或是隨時翻閱等;而這一篇學習資源整理將會為各位介紹幾本 ASP.NET MVC 的書籍,涵蓋實體書與電子書,希望能各位帶來幫助。

 


2013年2月19日 星期二

ASP.NET MVC - 使用 EditorForModel 編輯資料

EditorForModel,這個用來自動產生 Model 類別編輯內容的 Html Helper 我很少用它,應該說我從來沒有用在專案裡,在 ASP.NET MVC 2 的時候就已經有了,另外還有個專門產生顯示內容的 Html Helper 是 DisplayForModel,有關詳細的介紹可以參閱「ASP.net MVC 4 網站開發美學」作者之一「星寂」在其部落格的其中一篇文章介紹「ASP.NET MVC 2.0 Html.EditorForModel & Html.DisplayForModel」。

會想寫這一篇是因為有人在論壇裡提了一個問題,而這位提問者的程式內容就有用到了 EditForModel,所以我也就來實際操作一番,看看 EditorForModel 使用與不使用有何差異,以及是不是會發生如同那位提問者所遇到的問題。


2013年2月18日 星期一

DropDownList DataAnnotation 於 MVC 3, MVC 4 的差異狀況

這篇是記錄一下在之前某一次 twMVC 週四固定聚會時有一位朋友所提出問題的解決方式,這一個問題其實不難,只因為是 MVC 3, MVC 4 兩個版本不同而造成的差異狀況,最根本的解決方式就是改用 MVC 4 來做網站,而如果無法升級為 MVC 4 的話,那就使用我的土砲方式也是可以的。

狀況:一個簡單的類別,各屬性都有標註 DataAnnotation Validation 標籤,其中一個屬性在前端會以下拉選單方式呈現,所以當前端的下拉選單沒有選值時就會顯示驗證訊息:如果把這個簡單類別包裝在一個 ViewModel 類別中,那麼在 MVC 3 專案中,這個下拉選單的驗證就會失效,而 MVC 4 專案則是完全正常。

在 ASP.NET MVC 3 環境下:

image

在 ASP.NET MVC 4 環境下:

image

接下來就來看看這是怎麼一回事。


2013年2月17日 星期日

Visual Studio 擴充套件 - ReAttach

以前曾經介紹過可以使用「附加執行緒」的方式來進行偵錯「Visual Studio 使用「附加至處理序」來進行偵錯」,這樣的好處是不必每次按下 F5 後重新從網站起始頁在翻山越嶺地到偵錯的地方,但有時候按下「Ctrl + Alt + P」快速鍵後還要去選擇所要附加的執行緒時,這個步驟就會覺得有些累贅,所以如果有一個快速的方式可以幫我們省略掉這些步驟的話,那麼可以為我們節省下不少的時間,也大大地增加開發的效率,而接下來要為各位介紹的「ReAttach」就是可以幫助我們的擴充套件。


2013年2月9日 星期六

Visual Studio 2012 擴充套件 - MultiEditing extension

昨天在 Scott Hanselman 的部落格看到他前幾天所發的一篇文章中有介紹到這一個擴充套件「MultiEdit extension」,這套件所提供的功能只要是有使用過 Sublime Text 2 的朋友應該都會很熟悉,Sublime Text 2 裡有這麼一個好用的「Simultaneous Editing」功能,可以讓我們於多個選取的字詞進行同時編輯的動作,而這麼好的功能也有人為 Visual Studio 2012 做了相同功能的擴充套件,不過只有 for VS2012 而已,VS2010 就沒有啦!


2013年2月4日 星期一

取得 Entity 類別 MetaData 所設定的 Display Name

在「ASP.NET MVC 資料分頁 MVCPaging 2.0 應用 Part.4:分頁進階處理」的文章當中,我把資料的欄位排序改以表格的標題欄位來操作,因為那一篇文章只是做個範例,所以就直接以 Entity 的 Property 名稱作為標題來顯示,而實際的應用狀況下,我們的 Entity Property 名稱並不會直接顯示在頁面上,而是會另外以 DisplayAttribute 來標註要顯示的名稱,然後頁面上就顯示這個 Display Name。

不過有個朋友就在該文章回應並且提供一個方法,讓表格的標題改用 Display Name 來顯示,看了這位朋友所提供的方法後,覺得這個方法是可以達到需求,但還可以在做些修改,讓修改後的方法不只有提供給 View 做顯示之用,在其他有需要的地方,只要呼叫這個修改後的方法就可以輕易取得 Entity 類別中某個 Property 上的 Display Name。

 


2013年2月1日 星期五

Entity Framework 5 - 取得 Entity 的 Property Names 與 KeyMembers

當專案使用 Entity Framework 4 的時候,使用我之前介紹過的方法都是可行的,例如:

取得 Entity Framework 中 Entity 的主鍵成員名稱(KeyMember)
取得 Entity Framework 中 Entity 對應 Table 的原生 Column Name

而當專案使用 Entity Framework 5 之後就會發現到這些方法全都不行了,既然都不能用了就想辦法解決,只是這次就真的像破頭了,像我都是使用 Database First 的方式來建立 Entity Model,所以當我一開始想要用之前的方法在加上反射的方式來試著找出我想要的資料時,發現到 EF5 所建立的 EDMX 已經是大大不同了,這篇文章就說明如何在使用 EF5 的情況下找出 Entity 的 Property Names 與 KeyMembers。

 


2013年1月30日 星期三

ASP.NET MVC - ValidateAntiForgeryToken 與 自定 HandleError 處理顯示客製的錯誤訊息頁

在 ASP.NET MVC 裡為了要防止 CSRF (Cross-Site Request Forgery) 跨站偽造請求的攻擊,我們可以在 View 的表單中加入「@Html.AntiForgeryToken」然後在對應的後端 Action 方法加上「ValidateAntiForgeryToken」Attribute 來防止 CSRF 的攻擊,相關 CSRF 的資訊可以參考以下的連結:

Wiki :  Cross-site request forgery
TWISC@NTUST網路應用安全知識庫 : 跨網站的偽造要求(CSRF)
宅學習 : CSRF攻擊及防禦方法
ibm : CSRF 攻击的应对之道

而當網站接收到沒有 AntiForgeryToken 的 POST 請求時就會返回錯誤訊息,如果沒有指定錯誤頁的話大多會是使用預設的 Error Page,比較好的錯誤訊息顯示方式是不要透漏太多訊息,以免讓有心者可以去鑽漏洞,但如果真的想要指定錯誤頁的話,也是有方法的,這篇文章當中就跟各位來說明。


2013年1月17日 星期四

Sublime Text 2 - IMESupport

好久沒有寫 Sublime Text 2 相關的文章了,這麼久沒寫其實在之前也曾經解釋過,畢竟我還是開發 ASP.NET MVC 為主,所以編輯器是使用 Visual Studio,在編輯前端網頁的內容或是 Javascript 時,Visual Studio 已經是有提供相當不錯的功能,但還是有需要使用 Sublime Text 2 的時候,在使用 ST2 時會有個小小的困擾,那就是輸入中文的時候,在 Windows 環境下,在 ST2 裡面輸入中文真的是會讓使用者一整個怪異與不習慣,

image

以前曾經有位朋友向我提起過這個問題,最後也只能歸納為 ST2 對於非英語系的文字輸入支援度不夠,最後也就不了了之,然而最近看到 ST2 有個 Packages 是能夠解決這個問題。


ASP.NET MVC 4 使用 MiniProfiler 的調整方式

之前部落格裡介紹 ASP.NET MVC 使用 MiniProfiler 的文章都還是使用 ASP.NET MVC 3,到了 ASP.NET MVC 4 之後就沒有再介紹過了,而 ASP.NET MVC 4 仍然還是可以用 MiniProfiler 整合套件還是使用「MiniProfiler.MVC3」,不過有些地方是需要做些設定上的調整,另外在「MiniProfiler 安全性釋疑」這一篇文章是以 ASP.NET WebForm 來做說明,卻忘了交代 ASP.NET MVC 應該要怎麼做,所以這篇文章就來做個補充說明。


2013年1月7日 星期一

開箱文 - 2013 Microsoft MVP Award

當一月一號晚上得知獲選為 2013 第一季微軟 MVP 之後就一直期待著證書與獎座的到來,飄洋過海以及經過數日的等待,終於在今天中午寄送到家了,小弟到目前為止還沒有過一張與工作技能相關的正式證書,所以我相當重視這次微軟 MVP,就讓小弟再用一篇開箱文來滿足我那小小的虛榮心。

 


2013年1月6日 星期日

ASP.NET Web Forms 專案加入 ASP.NET MVC 4

ASP.NET MVC 與 Web Forms 的開發在前端展現處理上是有很大的差異,但是資料處理、商業邏輯的部份卻是沒有什麼不同的(當然這邊不包括說在 Web Forms 裡有人會使用到的 DataSource 控制項,基本上我開發 Web Forms 已經不用這些 DataSource 控制項),所以我們可以嘗試在 Web Forms 網站專案中加入 ASP.NET MVC,讓 Web Forms 與 MVC 共存在一個網站專案中,這樣的整合方式並不適合 ASP.NET MVC 的初學者,這一篇適合已經熟悉 ASP.NET Web Forms 並且也已經對於 ASP.NET MVC 開發相當熟悉的開發人員,對 ASP.NET Web Forms 還不熟悉或是只熟悉 ASP.NET Web Forms 開發並且對 ASP.NET MVC 完全不了解或是尚未熟悉的人,這一篇就請先跳過。

不過 ASP.NET Web Forms 4.5 專案要加入 APS.NET MVC 4 並不是一件容易的事情,事前會有一堆的設定需要調整,在本篇文章中將會位大家說明要如何完成這些的設定。

 


2013年1月3日 星期四

令人驚艷的 Web 編輯器 - Brackets

在去年 Kevin 有介紹了一個相當好用的文字編輯器「Sublime Text 2」並且也寫了一系列的介紹文章與相關套件的使用說明,而這一系列的文章也受到了許多朋友的關注,Sublime Text 2 的相關文章流量就站了這個部落格去年流量的三分之一,ST2 的確是不可多得的編輯神器,推薦給大家使用。

而之前在某一篇 ST2 的文章後面有人提出了問題,而有網友就推薦了一個新的前端開發 IDE,起先還沒有引起我的注意,因為當時我真的很忙,所以也就沒有特別留意,

image

但是前幾天看到國外一篇文章「What's Hot in 2013: Our Picks」,其中一項就有提到了 Brackets,在看過 Jeffrey Way 的介紹過後,就對這個網頁編輯器有了很大的興趣,所以在這邊介紹給大家。

 


2013年1月2日 星期三

當選 2013 年第一季微軟「最有價值專家」!!!

是的,小弟我當選 2013 年第一季微軟最有價值專家(MVP) ASP.NET/IIS,就讓小弟以一篇文章的篇幅來發表感想。

Microsoft_MVP_logo

2013 年的第一篇文章,今年繼續努力吧!


提醒

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

最近的留言