- Published on
ASP.NET MVC - Controller (三)
TempData
寫入 TempData 的資料被讀一次就會被刪除 (一次的 Request),使用 Session 來儲存資料
主要是拿來當資料庫寫入成功或是失敗時把資料帶到頁面用
通常會使用 Redirect、RedirectToAction 或 RedirectToResult,不然 TempData 有可能會提前消失

淺談 Model Binding
解析使用者傳到 Server 的資料,全部都交由 DefaultModelBinder 處理
簡單模型繫結
頁面上的表單 欄位名稱 (或是 QueryString 的名稱) 和 Action 的參數一樣時,在 Action 執行的時候,就會透過 DefaultModelBinder,將 表單 (或是 QueryString) 傳來的資料進行處理,傳給 Action 裡面同名的參數

FormCollection
為繼承 NameValeCollection 內容都是 key 和 value
下面的執行結果和上面是一樣的

複雜模型擊結
和簡單模型繫結差不多,只是表單資料對應到比較複雜的型別,通常 Entity 的型別都是如此
淺談資料驗証
預先驗証
資料在進到 Controller 之前 Model 就已經驗証完了
延遲驗証
把從表單來的資料手動作 Model Binding,這個時候資料還沒有進 DB
在 Action 裡面作驗証時,用 UpdateModel 驗證失敗時會丟出 exception,所以通常都是用 TryUpdateModel
因為不用在 Model 裡面作 Binding,所以帶入的 FormCollection 根本用不到,而 TryUpdateModel 泛型所傳入的參數,就是要被繫結上的資料庫模型物件

如果只有 特定欄位 更新時,一定要在 Action 裡面加上 Bind 的條件或是用 ViewModel 的方式,不然會有資安問題
ActionFilter

