public ActionResult SubmitDelete(string id, string btnSubmit) // 參數中不放任何model或變數, 就可以解除ModelBinder自動處理. { // 刪除. (這一版本將Delete View獨立出來, 不再跟update view 合併) //string btnSubmit = Request.Form["btnSubmit"]; //btnSubmit = form1["btnSubmit"]; // 結果同上. 建議使用FormCollection取值. string sKey1 = id; switch (btnSubmit) { case "刪除": // 執行刪除. // 刪除只需要取得key欄位, 就可以交給商業邏輯處理. //t1.ms1 = form1["ms1"]; // 因Delete View現在已經不跟update view 合併, 只剩下Key值, 因此可以交由ModelBinder處理 if (string.IsNullOrEmpty(sKey1)) { ModelState.AddModelError("ms1", string.Format("Key值不可空白.")); } // 無論是MoldelBinder或是商業邏輯的錯誤, 都收集到ModelState中, 再交由VIEW顯示. if (ModelState.IsValid) { P0030 oP0030 = new P0030(); if (!oP0030.Delete(sKey1)) // 商業邏輯 { if (string.IsNullOrEmpty(oP0030.msError)) { ModelState.AddModelError(oP0030.ToString(), "刪除失敗, 請聯絡系統管理人員取得失敗原因."); } else { ModelState.AddModelError(oP0030.ToString(), oP0030.msError); } } } // 若有錯誤時, 則留在原畫面並顯示錯誤資訊. if (!ModelState.IsValid) { // 保留輸入資料其實就是讓ViewModel取得已經輸入欄位資料. // 由於我們是把刪除跟修改的畫面作在同一個畫面 // 因此在取得key值欄位以後, 重新讀取資料庫, 更新原有的畫面即可. P0010ViewModel vm1 = new P0020().ConvertModelToViewModel(new T0010().Read1Record(sKey1)); ViewBag.ErrorList = new CMN0010().GetModelStateErrorList(ModelState); // 示範如何顯示所有的錯誤. return(View("Delete", vm1)); } break; } return(RedirectToAction("Index")); // 修改或刪除成功後或其他情況, 則轉到清單畫面. }