使用 record 簡化 ViewModel
- 2024-01-11
- 3555
- 0
不論是寫 MVC 或 Razor Pages 經常會使用 ViewModel 傳遞資料,享受 Model binding 的好處,但有很多的情境這建立好的 Class 只會用那麼一次,所以很多時候就會直接用參數來傳,現在可以使用 C#9 後新的 record 來簡單處理囉。
record 是什麼?
C#9以後推出的新類別,其特性為不變性與等值相等。
原先寫法
先建立一個 ViewModel
public class FormViewModel
{
public string Q { get; set; }
public string V { get; set; }
}
Controller
public IActionResult Form(FormViewModel pageModel)
{
ViewBag.Msg = $"Q={pageModel.Q}|V={pageModel.V}";
return View();
}
改用 record
//在 Controller 中直接使用 record
public record FormViewModel(string Q, string V);
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Form(FormViewModel pageModel)
{
ViewBag.Msg = $"Q={pageModel.Q}|V={pageModel.V}";
return View();
}
適合的情境
如果專案中的 ViewModel 真的是做 MVC 定義的 ViewModel(就是沒有處理,垃圾進垃圾出)那 record 的確是一個更適合偷懶的替代用法,推薦各位試試看。
回應討論