.net core 在@functions{}中声明一个属性与在Razor页面的PageModel中声明的属性有什么区别

.net core 在@functions{}中声明一个属性与在Razor页面的PageModel中声明的属性有什么区别,.net-core,razor-pages,.net Core,Razor Pages,我正在使用.Net Core 2.0构建razor pages应用程序 在.cshtml中声明属性(如下所示)有什么区别 @functions { public StandardListenerViewModel listener { get; set; } } 以及在页面模型中声明的 public class SingleDeviceModel : PageModel { [BindProperty] public StandardListenerViewModel

我正在使用.Net Core 2.0构建razor pages应用程序

在.cshtml中声明属性(如下所示)有什么区别

@functions
{
    public StandardListenerViewModel listener { get; set; }
}
以及在页面模型中声明的

public class SingleDeviceModel : PageModel
{

    [BindProperty]
    public StandardListenerViewModel listener { get; set; }

    public void OnGet(StandardListenerViewModel lstner)
    {
        this.listener = lstner;
    }
}

无论属性是在
函数
块中声明还是在PageModel类中声明,都没有真正的技术区别。编译应用程序时,它仍然成为生成类的属性。区别其实在于代码组织

大多数人更喜欢使用PageModel类,因为它在UI(标记)和请求处理逻辑之间提供了清晰的分离。单元测试逻辑要容易得多。您只需要在测试中实例化PageModel类的一个实例

一般来说,
函数
块更可能在简单的演示中使用,以使代码更易于遵循,便于概念验证。对于那些从PHP、经典ASP或ASP.NET网页迁移到Razor页面的人来说,它们可能还提供了一个更容易的平台,在这些网页中,处理逻辑和UI标记位于同一文件中是一种常见的模式