demoshop

demo, trying to be the best_

不論是寫 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 的確是一個更適合偷懶的替代用法,推薦各位試試看。

回應討論