這一篇純粹是個人學習感想文,雖然文章標題掛著「程式設計」好像是要教大家怎麼學習「程式設計」,But …… 我算哪根蔥,所以想要看這篇文章的方式來學習程式設計的話,可能會讓大家失望,其實這一篇比較像是回憶文或是嘮叨文,細說著我進入職場這 10 年以及在學期間學習程式語言的經歷,從專案中怎麼學習寫程式,怎麼讓觀念轉變,以及怎麼從 PHP, ASP 轉為 ASP.NET WebForms,最後再轉為 ASP.NET MVC,有興趣然後又不怕看密密麻麻又「落落長」的朋友,就請耐著性子看下去。
這一篇純粹是個人學習感想文,雖然文章標題掛著「程式設計」好像是要教大家怎麼學習「程式設計」,But …… 我算哪根蔥,所以想要看這篇文章的方式來學習程式設計的話,可能會讓大家失望,其實這一篇比較像是回憶文或是嘮叨文,細說著我進入職場這 10 年以及在學期間學習程式語言的經歷,從專案中怎麼學習寫程式,怎麼讓觀念轉變,以及怎麼從 PHP, ASP 轉為 ASP.NET WebForms,最後再轉為 ASP.NET MVC,有興趣然後又不怕看密密麻麻又「落落長」的朋友,就請耐著性子看下去。
純粹做個記錄,以免日後忘記該怎麼設定。
這一篇將會說明兩種使用 jQuery EasyUI DataGrid 的 Checkbox 設定方式,以及在既有資料下將 checked 為 true 的該筆資料列的 Checkbox 設定為 Checked,另外就是兩種 Checkbox 設定方式下如何取得有勾選的資料。
將前面幾篇有關 Repository 分層以及使用 Simple Injector 的文章作為操作示範的 Solution 給做了整理,將一些程式內容做了點修改,然後為了可以讓下載的人可以開啟 Solution 後就可以執行,所以兩個 Web 專案加入了 LocalDB 的使用,姑且不論程式內容是不是寫得完整,主要是要讓大家了解其實資料存取的分層並不是只有限於 ASP.NET MVC 而已,而且同樣做好的 Repository 也是可以直接給 ASP.NET WebForm 來使用,並沒有所謂 ASP.NET MVC 與 ASP.NET WebForm 的 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 來選擇不同的資料存取方式,而不用去大幅更改到原本的網站程式。
這一篇不打算廢話太多(我哪一篇文章的廢話有少過咧),就請各位仔細看清楚文章的程式內容。
今天一位朋友寫信向我詢問有關「ObjectStateManager 中已經有具有相同索引鍵的物件。ObjectStateManager 無法追蹤多個具有相同索引鍵的物件。」的問題,他看了我的「分層架構」系列文章後也動手實作練習,然後就在要更新資料並且執行 GenericRepository 的 Update 方法時就出現了錯誤。
這個錯誤的發生無關分層也無關使用 Unity bootstrapper for ASP.NET MVC 或其他 IoC Container,甚至也跟因為使用 IoC Container 而修改 GenericRepository Constructor 是沒有關係的,接下來就稍微跟大家說一下是怎麼一回事,然後怎麼解決這個問題。
這一篇的內容是延續前三篇文章的架構內容:
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」這篇文章提出問題:
雖然這個系列的文章並非三層架構,但還是做到將資料存取這個部分給抽離出 Web 專案,而且這樣的作法不管是在 ASP.NET WebForm 或 ASP.NET MVC 都可以使用。
前面兩篇有關 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 來達到網站選用三種不同資料存取方式的需求。
在 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,有可能就這樣讓很多朋友疏忽了這個部分,那麼就用這篇文章來做個交代吧。
上一篇「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 的教育訓練,因為公司的 .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 並沒有任何特殊限制。
文章標題很長,但主要是要記錄出現「OracleParameterCollection 只接受非 Null 的 OracleParameter 型別物件,不接受 OracleParameter 物件。」這個錯誤時的解決方式,這是出現在專案使用 Enterprise Library Data Access Application Block 存取 Oracale 資料庫的情況,同樣的存取方式如果是換成是對 MS SQL Server 做存取時就不會有問題,而對 Oracle 資料庫存取時就必須要使用另一種方式來解決。
錯誤畫面:
最近很多更新,上週是 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 開發有幫助的控制項是不會放過的。