2011年9月30日 星期五

Firefox 出現「發現容易停止回應的程式碼」警示訊息


這是Firefox因為你所瀏覽的網頁正在執行一些複雜且需長時間的前端程式,更有可能是執行中的程式已經失去控制,

或者是有些安裝於 Firefox 的套件而導致這樣的情況發生,例如:Firebug…

image

雖然說,上面出現的那個視窗可以勾選「下次不要詢問」,但是往往還是會時常出來跟你打招呼…

JavaScript 擴充String的屬性:startsWith, endsWith, contains


在前端使用JavaScript ( jQuery ) 時,有時候在某些操作上不是那麼方便,

畢竟後端C#程式寫久了,而且也很習慣Visual Studio的智能顯示(IntelliSense),

雖然說在VS2008後一直到目前的VS2010對於JavaScript( jQuery ) 的支援越來越好,也可以使用智能顯示,

但還是有些基本的方法還是要手動去寫程式擴充,

所以這邊就整理了三個有關在JavaScript對於String的屬性的擴充:

startsWith

endsWith

contains

2011年9月29日 星期四

練習題:取得指定月份第幾週星期幾的日期(日期的操作)


問題:
開始日期:2011/09/28
結束日期:2011/12/31
請取出 "每一個月第4週的星期二"  的日期。


其實這一題是延續「練習題:於指定的日期區間中取出符合指定DayOfWeek的日期」,

看起來好像蠻簡單的,但是這裡頭也碰到了幾個基本的日期操作,例如:

一年有多少週數?

如何自定每週的第一天是星期幾?

指定月份有幾週?

指定月份的第一天是一年之中的第幾週?

指定月份的最後一天是一年之中的第幾週?

指定週數的第一天,其日期為何?

指定週數的最後一天,其日期為何?

2011年9月28日 星期三

Visual Studio 使用「附加至處理序」來進行偵錯

上一篇文章「把正在開發的網站專案新增到IIS的站台」有說到如何在IIS去建立一個站台並將目錄並使用網站專案的路徑,然後在文章最後也說到會說明如何不使用「F5」來進行偵錯,時常看到專案的成員在編寫程式到一個段落後,看測試功能時,就會按下「F5」去執行,這時候就會看到Visual Studio 進入偵錯模式,然後開啟瀏覽器,接下來瀏覽器開啟網站的預設起始頁,再來就是開始測試他所編寫的功能,假如他所寫的功能,其路徑是在網站某個深處時,就開始要拔山涉水的一直點連結或是操作某些功能後才能到達,多半都只是為了要去測試那一些功能而已,卻要花那麼多的時間成本,實在是不值得。

而「附加至處理序」則是可以讓你在瀏覽器還在操作專案的某些功能時,如果想要在當前頁面進行偵錯時,就派上用場,不必重新啟動瀏覽器也不必整個程序重來一遍(除了有重新建置過且已有加入身分認證的除外)。

如果再搭配上「把正在開發的網站專案新增到IIS的站台」,既使還沒開啟Visual Studio的狀況下,可以瀏覽網站,要進行偵錯時,再把Visual Studio打開並載入專案後去使用「附加至處理序」來進行偵錯。


把正在開發的網站專案新增到IIS的站台


很多人在 Visual Studio 開發網站專案時,通常一個功能寫完要執行的時候,都會直接按下「F5」然後進入偵錯模式,然後接著開啟瀏覽器,開始進行功能的測試,但是當我們在瀏覽器的功能測試結束後要繼續編寫程式,就回到 Visual Studio 裡,再停止偵錯模式然後繼續寫程式。而停止偵錯模式後,那個自動開啟的瀏覽器也就跟著自動關閉(如果預設的瀏覽器是IE)。

而 Visual Studio 按下F5後進入偵錯模式,是使用 Visual Studio 內建的 ASP.NET 開發伺服器(ASP.NET Developement Server),但是有些時候開發環境下的測試就是會與上線到正式環境有所差異,這是因為正式的IIS與 Visual Studio 內建的 ASP.NET 開發伺服器有所不同,在 Visual Studio 的 ASP.NET 開發伺服器會有無法執行的地方,詳細情況可參閱以下文章:

The Will Will Web | ASP.NET 開發人員應使用 IIS Express 進行開發與測試

這篇文章主要是介紹IIS Express,但那必須開發環境是有使用Visual Studio 2010 SP1才可以。

所以接下來就簡單介紹一下如何在IIS中新增一個網站,然後指定到目前開發的網站專案目錄。


2011年9月27日 星期二

ASP.NET MVC 2 + MvcPaging + MiniProfiler 連結出現錯誤?


之前以兩篇文章介紹了有關MiniProfiler在ASP.NET MVC 2 與 ASP.NET MVC 3 的應用

ASP.NET MVC 2 + MiniProfiler 偵測執行效能

ASP.NET MVC 3 + MiniProfiler.MVC3 偵測執行效能

今天試著把MiniProfiler給裝在之前的資料分頁的範例專案「ASP.NET MVC - 資料分頁(5) 範例程式下載」,

在我自定的MvcSimplePager以及 MvcSimplePostPager, MvcSimplePostPager + Ajax都沒有什麼問題,

但是在原生的MvcPaging的Pager就出現了錯誤,如下:

image

所有的分頁連結變成了「http://localhost:4371/mini-profiler-results?page=2

URL應該是 Home/PageMethod1 的部份都被代換成 mini-profiler-result 了……

2011年9月26日 星期一

ASP.NET MVC 3 + MiniProfiler.MVC3 偵測執行效能


上一篇文章「ASP.NET MVC2 + MiniProfiler 偵測執行效能」介紹了在MVC2的專案中使用miniprofiler偵測執行效能,

而文章的最後有說到,MVC2 + miniprofiler並無法去偵測到EF所產生的SQL指令碼,

或許是還要改某些地方才可以讓MVC2專案偵測EF的SQL執行,我就沒有再多去研究,

但是看到許多的文章都是以MVC3來做說明,另外在Nuget上面也有看到miniprofiler.MVC3,

所以就直接用MVC3開個新專案來使用miniprofiler。

ASP.NET MVC 2 + MiniProfiler 偵測執行效能


有時候常常會遇到執行效能的問題,除了找尋讓執行效能延遲的原因,也希望能夠知道每個步驟與環節所耗費的時間,

這樣就可以知道哪些地方發生了問題,或是使用了錯誤的程式寫法而使得系統效能出現問題,

很多人會用的老方法就是在程式執行的開始與結束去記錄時間,然後再把時間做相減後得到一個執行的時間,

但是這會遇到很多個問題,

第一個會遇到的就是,開發時期可以這麼做,

但如果要部屬到測試機或是正式機前,必須要手忙腳亂的把這些用來偵測的程式給移除或是註解起來,

而且還有可能會有不小心遺漏的地方。

第二個會遇到的問題將事前項問題最後所提到的,如果你要偵測的地方很多,那麼你要去下偵測程式碼的地方也很多。

第三個會遇到的問題是,當你所開發的專案有切分很多層時,往往在畫面上就不容易去顯示除了顯示層以外其他層所要偵測的資料。

如果有一個工具可以解決以上的問題,那麼在系統開發就會很方便也更容易及早發現影響效能的地方。

2011年9月22日 星期四

屬性(Property) 與 欄位(Field)

建立類別的時候,往往會遇到這兩個成員:Property 以及 Field,熟悉物件導向對於物件封裝的人應該是可以區分這兩種成員的差別,但是對於初學者或是對 OO 不熟悉的人是搞不清楚,明明兩種都是可以去儲存以及取得物件中的資料,但是到底兩者有什麼差別呢?又應該在什麼樣的情況下去使用這兩種成員?

所以就看到很多人都是直接在自訂類別中使用 Field,這狀況尤其在 ASP.NET MVC 的 ViewModel 最多,為什麼要捨 Property 而就 Field 呢?因為 Filed 在 Coding 時最快、最方便。反正只要可以存取資料,管他什麼是 Property、Field ……

但是這樣對嗎?

讓我們來認識 Property 與 Field 的差別。

2011年9月21日 星期三

ASP.NET MVC - 資料分頁(5) 範例程式下載


這邊提供這一系列資料分頁(1) ~ (5)的程式範例,

另外這一系列的範例所使用是.Net Framework 4.0,而ASP.NET MVC版本為2,

資料存取層使用的是ADO.NET Entity Framework,

而資料庫所使用的是微軟所提供的Northwind(北風資料庫)

ASP.NET MVC - 資料分頁(4) MvcSimplePostPager + AJAX


之前幾篇的資料分頁文章裡面所說明的,無論是用HyperLink或是用Post方式,送出後再傳回前端燈一定會Reload,

有的專案會比較要求UI操作,會提出分頁不想要有整頁Reload的情況,而是要用AJAX的方式,只更新分頁資料部分,

在以往採用ASP.NET WebForm開發時,我想大部分的開發者一定會把這種要有AJAX效果的部份給塞到UpdatePanel,

但是在ASP.NET MVC就不需要用這樣的方式來達成AJAX(很多人會覺得不習慣沒有UpdatePanel),

但是ASP.NET MVC+jQuery的搭配下,可以讓我們以更加彈性的方式來完成AJAX分頁的效果。

ASP.NET MVC - 資料分頁(3) 自訂分頁功能列 MvcSimplePostPager


上一篇資料分頁的文章「ASP.NET MVC - 資料分頁(2) 自訂分頁功能列 MvcSimplePager」最後有說到,

當表單查詢遇到資料分頁時,用原本的資料分頁方式會出現問題,

因為資料分頁於跳頁時是利用HyperLink將頁數資料以Get傳回後端處理,查詢條件就無法一併送到後端去處理,

為了達到這個需求,所以就把原本的MvcSimplePostPager做了一些修改,

讓前端的分頁功能列可以將查詢表單上的條件一起傳回後端,送回前端的資料一樣是維持查詢條件,

所以這篇文章就是說明如何製作一個使用「Post」方式的資料分頁方式。

2011年9月18日 星期日

ASP.NET MVC - 資料分頁(2) 自訂分頁功能列 MvcSimplePager


在「ASP.NET MVC - 資料分頁(1) 使用MvcPaging」這篇文章中已經有介紹如何使用MvcPaging來做資料分頁,

而MvcPaging所提供的Html.Pager()所產生的分頁功能列是比較陽春的,

就是有各個頁數的連結以及上一頁、下一頁的連結,但有時候客戶那邊會希望分頁的功能列可以有些變化,

在不去修改MvcPaging原始碼的情況下,我們可以在IPagedList<T>的基礎上去自己設計一個分頁功能頁。

以下說明如何自訂分頁功能列(姑且命名為:MvcSimplePager)

Visual Studio 快速鍵整理 - 偵錯與建置


上一篇文章已經有介紹過「Visual Studio 快速鍵整理 - 編輯」,接下來這一邊就介紹偵錯與建置時常用的快速鍵。

多記一點快速鍵,讓效率更好一點!

Visual Studio 快速鍵整理 - 編輯


使用Visual Studio來設計.NET程式比起其他程式開發環境來說是比較方便,

因為有太多的功能都整合在這個IDE環境下,再加上VS2010開始提供了擴充管理員功能與新加入的NuGet功能,

在功能擴充與套件更新的操作上就更加方便了,

但是……還是會看到很多人在編寫程式碼的時候,還是習慣寫Code寫到一半時要再去花點時間去操作滑鼠,

然後按下滑鼠的左右鍵來完成一些功能的操作,看在我的眼裡,其實有些操作是可以不用去動用到滑鼠的,

畢竟在寫Code正起勁的時候,還要多花時間去操作滑鼠,對於講求效率的程式設計人員來說,

可以用鍵盤快速鍵來完成的操作就不要多花時間操作滑鼠。

 

以下整理有關「編輯」時,我常常會去使用到的鍵盤快速鍵,多記一點快速鍵,讓效率更好一點!

2011年9月17日 星期六

ASP.NET MVC - 資料分頁(1) 使用MvcPaging


做專案的時候除了表單常常碰到之外,資料表格的顯示也是常常需要處理的,

而資料表格的顯示也通常會需要做到資料分頁的功能。

製作ASP.NET WebForm的網頁時,使用GridView的話,可以使用內建的分頁功能,

而在.NET 3.5後還有提供一個DataPager的控制項,專門處理資料分頁的功能。

到了使用ASP.NET MVC來做網頁時,因為沒有控制項的提供,所以包括資料表格就必須要自己處理,

當然,資料分頁的功能也需要自己動手做。

目前網路上已經有很多相關資料分頁套件可以使用,但是這邊就從一個最基本的功能來做介紹,

並延伸之後ASP.NET MVC資料分頁相關介紹。

2011年9月14日 星期三

練習題:於指定的日期區間中取出符合指定DayOfWeek的日期


這也是在網路上所看到的一個問題,

“如果我想要抓一段日期,並秀出在此日期區間每個星期二的日期
   2011/09/14~2011/10/14 每個星期二 請問要如何抓出”

所然說提問者是用VB語法,但是用C#來寫也是一樣的,主要是邏輯的部份是相同的。

練習題:取出兩個字串中有差異的字


今天在網路上看到有人提出一個問題:

字串一:ABCDEF

字串二:ABC1D2E3F

要用怎麼取出兩個字串差異的 123 呢?

並不是取出數字的部份,這邊只是做個簡單示意,主要是取出兩個字串有差異的部份,一開始覺得這沒有什麼,但是細想一下…這其實也蠻好玩的,就當做練習題來做做看。


.NET反組譯工具:ILSpy, Telerik JustDecompile


在做專案的時候,有可能會去接到不知道多解以前寫的專案,原始碼早就不知道丟到哪去了,

所留下的文件也是零零落落,而且最慘的是當初做專案時根本沒有使用版本控制,

反正就是只有剩下DLL檔案,其他什麼都沒有!

另外還有一種狀況是想要看看某些組件是怎麼做的,但是這些組件並沒有開放原始碼。

 

在之前都會用「.NET Reflector」這個工具來去查看這些組件的原始檔,

但是現在「.NET Reflector」要開始收費了,而且一套標準版的費用就要美金35元,

而且標準版還是只有一般的執行版本,並沒有提供Visual Studio的整合套件,

如果需要Visual Studio的整合套件的話就要美金65元,而且更高的版本更要美金95元!

又不是三不五時都會需要反組譯去看原始碼,所以這個錢就花不太下。

還好有另外兩個功能相近的反組譯工具,可以取代「.NET Reflector」。

LINQPad - 好用到爆炸、.NET開發人員必備的好用工具

自從.NET Framework 3.0 發佈LINQ(音同 Link)之後,對於程式開發人員於專案中的資料庫操作或是集合物件的操作,都有了很大的變化,不論是使用LINQ to SQL 或是 ADO.NET Entity Framework還是對於集合物件的資料查詢、彙整等操作,都可以使用一致性的查詢方式來操作資料。

然而並不是每個.NET開發人員對於LINQ是那麼的熟悉,我從2007年開始接觸LINQ後,至今已經也差不多快四年了,也還是會在周遭聽到或看到:

  • 沒有用過(這位工程師的桌上還擺了好幾本.NET 4.0, 3.5的書!?)
  • 甚至有的工程師只有看過而從來沒有用過(這很令人匪夷所思…都出來這麼多年,也該找個時間好好認識呀)
  • 更有的工程師甚至認為LINQ只是用來取代原本的ADO.NET(這是什麼觀念呀?!)
  • 而更多的開發人員最感到不便的就是要練習LINQ還需要大費周章的開啟Visual Studio然後寫程式後再按F5看結果,因為這樣所以不想認識LINQ(這腦袋不知怎麼想的…)

如果有個方便的工具可以拿來練習LINQ的話,或許對於LINQ可以認識更多。

如果在專案開發時,不用頻繁的F5執行程式看結果,而是可以在工具裡去下LINQ語法然後立即驗證的話,可以使開發更加的便利。

不用再找了!LINQPad就是這樣的一個好用到爆炸、.NET開發人員必備的好用工具。


2011年9月12日 星期一

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


連動式下拉選單在網站中也算是相當常見的功能,在ASP.NET WebForm裡,很多開發者都會直接在UpdatePanel中做解決,但是這樣的方式其實對於效能來說並不是很好,而往往很多開發者若是沒有對UpdatePanel做好配置的話,常常會有些開發者整個網頁就只有一個UadetePanel,這樣的Ajax也只能說是做假的,而有的開發者如果細分到每個下拉選單都給一個UpdatePanel,那在開發上也蠻瑣碎的,因為頁面上要做Ajax效果的地方通常也不是只有下拉選單而已。

而在ASP.NET MVC的ViewPage則是比較沒有這種顧慮,因為在MVC是用不到UpdatePanel,充分搭配 jQuery 下,ASP.NET MVC所做的Ajax效果是可以比WebForm來得更為靈活以及輕巧,以下就介紹幾種在ASP.NET MVC下製作連動式下拉選單的方法。

 


jQuery 對下拉選單 DropDownList 的操作 - 1

下拉選單在網頁表單上是個使用相當頻繁的物件,以前在還沒有使用 jQuery 時,對於下拉選單的操作就不是那麼的直覺與方便,現在有了 jQuery 之後,操作下拉選單就同如虎添翼一般,但是在專案執行的過程中,還是時常看到令人哭笑不得的操作方式,看久了就想整理一篇文章,記錄一下使用 jQuery 操作下拉選單的各種方法與心得,總之就是要消除不良寫法以及去除沒有效率的操作!


2011年9月10日 星期六

JavaScript - 浮點數運算


在JavaScript裡,有小數點的數值運算有時會出現讓無言的結果,例如以下:

image

沒有出現預期的4.31,反而出現了4.3100000000000005……這也差太多了

JavaScript – String.format


在C#中對於字串的串接處理或是字串處理時可以使用String.Format這個方法,

處理格式化的字串上會比較清楚,而且減少錯誤,

更重要的是少用 + 的串接方式,可以減少多餘物件的建立,

 

題外話:

竟然有人跟我說用String.Concat, String.Format方式處理字串連接會比直接用 + 來得慢…

而且還寫個測試給我看,但是他忽略了,多次迴圈處理字串不應當用固定的短字串做測試,

應該用隨機產生長短不一的字串來測試才看得出差異,改天來做個測試!

提醒

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