The Will Will Web

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

ASP.NET MVC 5 如何精準控制不同 Controller 下的 Session 運作機制

很多人並不知道 ASP.NET 的 Session 其實是有毒的!所以我個人會盡一切可能避免使用到 Session 機制,以免頁面遭到鎖定(Lock)狀況,影響使用者操作體驗。這篇文章我打算分享如何在 .NET Framework 的 ASP.NET MVC 5 精準控制不同 Controller 下的 Session 運作機制,避免使用者在多頁籤瀏覽的情況下遭到 Session 鎖定而無法瀏覽網頁。

... 繼續閱讀 ...

修復 Visual Studio 中 ASP.NET MVC 5 專案範本的 Error.cshtml 檔案內容

從 Visual Studio 2017 一直到 Visual Studio 2022 的 ASP.NET MVC 5 專案範本,其 /Views/Shared/Error.cshtml 檢視 (View) 檔案內容都是錯誤的。之前在講授 ASP.NET MVC 5 課程的時候,每次都要自己 Google 以下這個檔案的完整範例,或是去翻找我之前寫過的版本。今天這篇文章特別將該檔案的問題做個說明,並且提供完整的範例程式,方便我日後快速查找到正確的 Error View 檔案內容。

... 繼續閱讀 ...

如何正確建置 ASP.NET MVC 5 原始碼並對原始碼進行分析研究

上次寫這個主題已經是 2009/2/8 的事情了,原來我已經用 ASP.NET MVC 寫了超過 12 年。時至今日 ASP.NET MVC 5 已經非常穩定,而且微軟還有團隊在維護這套框架,但不會增加新功能,只會修正社群回報的 Bug 而已。由於最近正在進行 ASP.NET MVC 5 開發實戰課程,我也非常建議學員可以下載原始碼回來研究,所以這篇文章我將說明下載原始碼編譯的幾個重要步驟。

... 繼續閱讀 ...

ASP.NET MVC 開發心得分享 (28):深入了解 ModelState 內部細節

在 ASP.NET MVC 的 模型繫結 (Model Binding) 完成之後,我們可以在 Controller / Action 中取得 ModelState 物件,一般來說我們都會用 ModelState.IsValid 來檢查在「模型繫結」的過程中所做的 輸入驗證 (Input Validation) 與 模型驗證 (Model Validation) 是否成功。不過,這個 ModelState 物件的用途很廣,裡面存有非常多模型繫結過程的狀態資訊,不但在 Controller 中能用,在 View 裡面也能使用,用的好的話,可以讓你的 Controller 更輕、View 也更乾淨,本篇文章將分享幾個 ModelState 的使用技巧。

... 繼續閱讀 ...

ASP.NET MVC 5.2.3 的 View 使用 Roslyn (C# 6.0) 編譯時的問題

最近發現目前的 ASP.NET MVC 5 最新版 (v5.2.3) 在搭配 Visual Studio 2015 進行開發時,在 View 頁面中使用 @Html.IdFor() 或 @Html.NameFor() 在搭配使用特定 Lambda 語法時會輸出奇怪的字元,由於所有強型別的 HtmlHeper 表單欄位輸出的內部都會用到 IdFor() 與 Namefor() 這兩個 API,所以這個問題將會導致這些表單欄位 HTML 輸出的時候產生錯誤的 id 與 name 屬性,當表單 POST 回 Controller 時將無法正確執行模型繫結 (Model Binding),所以會有接不到資料的情況,本篇文章將詳加說明發生的原因與暫時的解決方案。

... 繼續閱讀 ...

ASP.NET MVC 5 遺失的 Microsoft jQuery Unobtrusive Ajax 函式庫

以前在開發 ASP.NET MVC 4 的時候,Visual Studio 的專案範本中本身就已經包含了 Microsoft jQuery Unobtrusive Ajax 這個 NuGet 套件,所以當你想用 @Ajax 輔助方法時,自然不會遇到什麼困難。打從 ASP.NET MVC 5 開始,Visual Studio 2013 的專案範本改成預設不安裝 Microsoft jQuery Unobtrusive Ajax 套件,想用的時候不是安裝一下就好嗎?我自己一直這樣認為,所以不覺得有什麼不對,不過前陣子還是有同事剛從 ASP.NET MVC 4 升級到 ASP.NET MVC 5,他在第一次開發 ASP.NET MVC 5 專案時剛好也有用到 @Ajax 輔助方法,還是被卡關了一些時間,因此特別撰文提醒這個問題。

... 繼續閱讀 ...