[jQuery] Global Ajax Event Handlers
jQuery 提供 ajaxStart、ajaxSend、ajaxSuccess、ajaxError、ajaxComplete、ajaxStop 六個 Global Ajax Event Handlers,可把 blockUI / unblockUI 等共用邏輯集中處理,達到關注點分離,不必每次 $.ajax 都重複撰寫。
jQuery 提供 ajaxStart、ajaxSend、ajaxSuccess、ajaxError、ajaxComplete、ajaxStop 六個 Global Ajax Event Handlers,可把 blockUI / unblockUI 等共用邏輯集中處理,達到關注點分離,不必每次 $.ajax 都重複撰寫。
NHibernate 會自動監控透過 Session.Get 載入的實體,異動屬性後只要 Session.Flush 就會同步到資料表;因此同仁程式碼中額外呼叫的 Session.Update 其實是多餘的寫法。
排查 Spring.Net AOP 造成 NHibernate Transaction 失效、物件沒有被掛上 Proxy 的問題:SdkRegularExpressionMethodPointcut 設定多個 pattern 時需改用 patterns 搭配 list,否則只有最後一條規則會生效。
ViewModel 是帶有狀態與行為(如 Required、EmailAddress 等 Data Annotation 驗證)的 POCO;DTO 則是純資料搬運物件,不包含行為。分開兩者可避免 View 變動時牽動商業邏輯層與資料存取層,降低耦合。
整理 Asp.Net MVC 分層架構:Controller 接到 ViewModel 後,應透過 AutoMapper 轉成 DTO 或 Entity 再進入商業邏輯層與資料存取層,避免 ViewModel 污染 Service 層,換 View 或做單元測試時都能更容易。
說明如何在 Asp.Net MVC 以 @Html.AntiForgeryToken 搭配 [ValidateAntiForgeryToken] FilterAttribute 防範 CSRF;並示範改用 jQuery $.ajax 時,如何把 __RequestVerificationToken 帶進 data 中通過防偽基元驗證。
Asp.Net MVC 的 AjaxHelper 透過 Ajax.BeginForm 產生帶 data-ajax 屬性的表單,但瀏覽器仍會走一般 Form Submit;需安裝 NuGet 的 unobtrusive AJAX 套件引用 jquery.unobtrusive-ajax.js,才會偵測屬性並改以 Ajax 送出。
介紹 C# 3.0 擴充方法 (Extension Methods) 的用途與寫法:以 static 方法加上 this 關鍵字即可為 String 等原生類別擴充新方法,例如把 int.TryParse 封裝成 "12345".ToInt(),讓常用轉換寫起來更簡潔。
Asp.Net MVC 使用 @Html.ActionLink 若專案切割了 Area,產生的連結會被自動加上 Area Name 並不斷疊加,最終造成 Routing 失敗;解法是傳入 area = string.Empty 強制清空 Area 路由參數。