討論上篇遺留陷阱:IForbiddenWordFilter.GetFilterType 在 OnPostMapRequestHandler 階段調用,此時 Handler 已生成但控件 (如 txtPassword) 尚未實例化,直接存取 this.txtPassword.ID 拋 NullReferenceException。解法:用 Lambda 運算式樹取得欄位名稱字串:
Expression<Func<object>> action = () => this.txtPassword;
var name = (action.Body as MemberExpression).Member.Name;
編譯期完成欄位名提取,享受重構支援。適用場合:輸入端過濾意味服務端拿到已替換內容,若需原始輸入則不適用。更多思考留給讀者。