ASP.NET MVC | The Will Will Web

The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

ASP.NET MVC 開發心得分享 (24):擴充部分類別的建構子

在 ASP.NET MVC 使用 Entity Framework 資料庫先行開發模式 (Database-First Development) 的時候,因為所有 POCO (Plain Old CLR Object) 類別都會透過 *.tt 程式碼產生器範本自動建立,當我們想擴充資料模型時,勢必不會直接把驗證屬性直接寫在這些類別裡,而是在另一個部分類別檔案中,透過 MetadataType 屬性 (Attribute) 宣告一個 Metadata 類別 (又稱 Buddy Class)。另一方面,我們也會在資料模型的 POCO 類別的「建構子」方法中宣告屬性的預設值,但這時問題來了,如果我們在自動產生的資料模型類別中,已經宣告過「建構子」的話,那我們該如何在另一個部分類別檔案中再次「宣告」建構子呢?這就是這篇文章想要解決的難題。

... 繼續閱讀 ...

Visual Studio 2013 – ASP.NET 與 Web 功能快速預覽

TechEd North America 2013 正如火如荼的進行中,看了第一天的幾場,又再次陷入資訊爆炸的狀態。這次看見 Visual Studio 2013 推出了許多 ASP.NET 與 Web 相關功能預覽,覺得還蠻興奮的,特別摘錄 Microsoft ASP.NET, Web, and Cloud Tools Preview 影片中幾個亮點,讓大家快速掌握 VS2013 與 ASP.NET 的新功能。

... 繼續閱讀 ...

ASP.NET MVC 開發心得分享 (23):反向表列路由限制的語法

我曾經在【ASP.NET MVC 開發心得分享 (21):Routing 觀念與技巧】這篇文章中分享過幾個路由開發技巧,其中在【技巧 1:替 Routing 網址設立條件限制】的部分有示範如何透過簡單的 RegEx 規則運算式 (正則表達式) 來限制路由變數的內容規則。不過,通常你在網路上能查到的這些 路由限制 (Route Constraints) 範例,大多使用「正向表列」的方式進行比對,這的確在大部分開發情境下都是這樣用的,但在特定比較少見的開發情境下,你或許需要「反向表列」的方式來限定路由參數的比對規則,尤其是在 ASP.NET MVCASP.NET HttpHandler 混合執行的情況下,更容易遇到這樣的問題。

... 繼續閱讀 ...

ASP.NET MVC 4 部署到 Windows Azure 如何轉換時區設定

由於公司慢慢地開始將新的專案都移往 Windows Azure 雲端平台做網站代管,漸漸地也開始遇到一些小問題,這些問題在還沒上雲端之前通常不會發生,像我們這次遇到的問題就跟顯示時間有關。由於 Windows Azure 雲端平台是全球性、跨國家、跨地域的服務平台,因此,無論是 .NET 執行環境的時區,或是 SQL Database 資料庫的時區,預設都是以 UTC 世界標準時間 (Coordinated Universal Time) 為主,也因此在上面執行的網站在顯示時間時,你就會覺得時間好像怪怪的,怎麼都不準。今天我就是要來講怎樣利用 ASP.NET MVC 的 範本檢視 (Templated View) 來有效的解決這個問題。

... 繼續閱讀 ...

如何在 .NET 4.5 的 ASP.NET MVC 4 網站使用 Scaffold 範本

各位可能曾經在 ASP.NET MVC 4 新增控制器且使用 Scaffold 範本時,遇到如下圖的錯誤訊息,這個錯誤訊息非常的奇怪,但真正令我疑惑的是,我自己在企業教學或在補習班教學的時候,在一班裡都會有 20% ~ 30% 的學員遇到,而我自己卻從來沒遇到過,所以之前都認為是「電腦出了問題」,換一台就好了,直到最近,我才真正找到原因,接下來就看我怎樣解決這個問題。

'xxx' 不是指定之 'xxx' 類別的一部分,而且無法修改 'xxx' 類別以新增 'DbSet<xxx>' 屬性 (例如,'xxx' 類別可能位於已編譯的組件中)。

... 繼續閱讀 ...

如何對 ASP.NET MVC 4 原始碼進行偵錯 (終極完整觀念版)

今天有讀者反映我的書【ASP.NET MVC 4 開發實戰】講到 如何對 ASP.NET MVC 原始碼進行偵錯 這一個技巧時,照著書操作沒有成功,我自己重新試了一次,還真的沒辦法,這才發現事情沒有想像中單純,魔鬼總在細節裡,我今天又花了 6 個小時反覆研究、測試、分析,這才終於釐清為什麼以前可以,現在卻無法對 ASP.NET MVC 4 原始碼進行偵錯的原因。因此我打算轉載書中的內容,並加以更新、補充,好讓大家能夠完整且順利的將 ASP.NET MVC 4 原始碼加入到專案之中。

※本篇文章摘錄自筆者出版的【ASP.NET MVC 4 開發實戰】一書,並且更新部分內容!

... 繼續閱讀 ...

如何在 ASP.NET MVC 4 套用 ELMAH 錯誤紀錄模組

我幾乎每次在 ASP.NET 的教學場合裡都會提到在 ASP.NET MVC 專案中安裝 ELMAH (Error Logging Modules and Handlers) 的重要性,不僅僅是在開發環境或測試環境能夠收錄完整的錯誤訊息,即便在正式運行的網站也非常適合安裝 ELMAH 錯誤記錄模組。不過,當 ASP.NET MVC 網站的 web.config 設定為 <customError mode="On" /> 的情況下,由於 ASP.NET MVC 專案預設都會套用 HandleErrorAttribute 全域動作方法 (Global Action Filter),因此網站執行過程任何的例外都會被過濾掉,若不做特殊的設定還無法透過 ELMAH 取得錯誤紀錄,本篇文章將分享如何有效率的解決這個問題。

... 繼續閱讀 ...

如何在 ASP.NET Web API 套用 ELMAH 錯誤紀錄模組

每個網站必備的 ELMAH (Error Logging Modules and Handlers) 模組,在使用 ASP.NET Web API 時卻無法自動套用,也就是說 ASP.NET Web API 執行的過程中發生任何例外,預設都不會自動寫入 ELMAH 指定的儲存區。那是因為 ASP.NET Web API 的主要用途是用來回應呼叫 RESTful API 的用戶端要求,為了不讓用戶端得到不符合 JSON 或 XML 格式的訊息內容,因此所有例外都會被 ApiController 基底類別給攔截,如果我們想在 ASP.NET Web API 實作錯誤紀錄,則必須透過 Action Filter 來設定。

... 繼續閱讀 ...

新書出版:〔ASP.NET MVC 4 開發實戰〕已於 12/20 上市

俗話說的好,有一就有二,無三不成禮。兩年多前出版了人生第一本書 ASP.NET MVC 2 開發實戰〕,獲得廣大開發人員的肯定與迴響,還曾經一度爬上天瓏排行榜冠軍,這些對我來說都是美好且難得的回憶。一年多前,也應邀翻譯了一本〔Windows Phone開發實戰〕書籍,還藉此提升了英文閱讀能力,也算有所收穫。今年,排除一切困難,在百忙之中抽空完成了前年這本書的改版,名為〔 ASP.NET MVC 4 開發實戰〕且已在幾天前正式出版上市,趁著這次新年四天年假,著實是看書的大好時機,大家加油! (^_^)

... 繼續閱讀 ...

ASP.NET Web API 無法輸出 Entity Framework 物件的解法

開發 ASP.NET Web API 時,如果專案使用 Entity Framework 技術的話,當 Entity 與 Entity 之間包含導覽屬性 (Navigation Property) 的話,在預設的情況下,ASP.NET Web API 在輸出 JSON 格式時,會引發一個 System.InvalidOperationException 的例外狀況,其錯誤訊息為「'ObjectContent`1' 類型無法序列化內容類型 'application/json; charset=utf-8' 的回應主體。」,若要解決這個問題,有幾個必須注意的地方,才能讓 ASP.NET Web API 正常且穩定的運作。

... 繼續閱讀 ...

ASP.NET MVC 使用 Html.BeginForm 預設多載引發的問題

最近因為有客戶要求將網站部署到 Windows Azure WebSites 雲端平台,原本在開發環境測試都沒什麼狀況,反而是部署到 Windows Azure WebSites 之後才發現一個棘手的問題,一般網頁瀏覽並不會有問題,而是當使用 IE 瀏覽器,且有表單要送出資料時就會發生 502 - Web server received an invalid response while acting as a gateway or proxy server. 的問題,這才發現一個 ASP.NET MVC 的小臭蟲(Bug)。

... 繼續閱讀 ...

解決 IE10 瀏覽器無法使用 ASP.NET 表單驗證登入的問題

今天凌晨在客戶端上線,當程式佈署到正式機後發現我們的網站唯獨只有 IE10 瀏覽器無法成功登入,任何其他瀏覽器版本或使用較低的 IE 版本都可以正常登入,使用 IE 相容性檢視也都可以正常登入,想說會不會又是罄竹難書的 IE10 搞的鬼。後來用 Fiddler 工具檢查後發現 IE10 送出的 HTTP 標頭完全沒問題,該有的 .AUTH Cookie 都有送出,但使用表單驗證機制 (FormsAuthentication) 就是無法判斷該使用者已經登入,還真的再次鬼打牆,最後還是研究出解決方法。

... 繼續閱讀 ...

ASP.NET Web API 如何透過程式決定回應XML或JSON格式

雖然 ASP.NET Web API 內建支援 JSON 與 XML 兩種輸出格式,並依據瀏覽器端送出的 Accept 標頭自動決定回應的內容格式,不過有時候我們的確也需要讓程式來控制要回應哪種格式,本文將介紹如何讓 ASP.NET Web API 自訂回應結果格式 (XML 或 JSON),以方便透過其他方法來決定如何回應訊息格式。

... 繼續閱讀 ...