Razor Pages 中 PageModel 与 ViewData 的区别和优势

Differences and benefits of PageModel vs ViewData in Razor Pages

我找不到任何明确的解释。

我试图了解 PageModelViewData 作为将数据从 C# 代码传递到 cshtml 以在 Razor Pages 中呈现的工具的区别和好处。对性能、可靠性、可测试性有什么影响?

使用ASP.NET 6.

PageModel 是强类型:IntelliSense 和 compile-time 在访问内容页面中的模型属性时进行检查。

ViewData 可用作模型属性的 ViewData 属性。 ViewData 与布局页面(以及内容页面或布局调用的任何部分页面)共享,因此该属性可以轻松地将类型化数据从 PageModel 传递到布局页面或部分页面,而无需将其显式分配给 ViewData词典.

示例:

public class IndexModel : PageModel
{
    [ViewData]
    public string Message { get; set; }
    public void OnGet()
    {
        Message = "Hello World";
    }
}

<h2>@ViewData["Message"]</h2>添加到布局页面。