在@functions {}中声明一个属性与在Razor页面中的PageModel中声明的属性之间有什么区别?

时间:2019-06-14 11:42:56

标签: .net-core razor-pages

我正在使用.Net Core 2.0构建剃须刀页面应用

在.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;
    }
}

1 个答案:

答案 0 :(得分:1)

就属性而言,无论是在functions块中还是在PageModel类中声明它,都没有真正的技术差异。编译应用程序时,它仍然成为生成的类的属性。区别实际上是代码组织之一。

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

通常,functions块更可能在简单的演示中使用,以使代码更易于遵循以证明概念。对于那些从PHP,经典ASP或ASP.NET网页迁移到Razor页面的人来说,它们可能也提供了更轻松的过渡,在同一文件中具有处理逻辑和UI标记是常见的模式。