将值从剃刀形式传递到模型

时间:2019-05-10 08:09:06

标签: c# .net asp.net-core razor

我有一个带有Razor应用程序的.NET Core,然后有一个页面。它上面有一个表格和一个表格,用于显示该表格中的不同(过滤器)数据(简单的年月和复选框输入)。窗体的方法设置为GET。 我注意到,可以通过两种不同的方式将表单数据传递到模型中:

[BindProperty(SupportsGet = true)]
public DateTime Date { get; set; }

[BindProperty(SupportsGet = true)]
public bool ForUserOnly { get; set; }

public async Task OnGetAsync(DateTime date, bool forUserOnly)

问题是,我应该使用哪一个?彼此的好处是什么?

1 个答案:

答案 0 :(得分:0)

两种方法均有效。这取决于您提交form时需要实现的目标。

  • 如果需要访问,请使用[BindProperty(SupportsGet = true)]方法 处理程序方法OnGetAsync之外的属性,例如 在页面上显示

  • 在属性不存在时使用OnGetAsync处理程序方法 需要在此处理程序方法之外。

无论使用哪种方法,都将始终调用处理程序方法,该方法可让您添加一些自定义逻辑,例如自定义验证之类的。

如果您具有如下定义的公共属性,则可以使用QueryString参数或RouteParameters来绑定它们。使用GET方法提交表单时,参数将作为查询字符串附加到URL。

[BindProperty(SupportsGet = true)]
public DateTime Date { get; set; }

[BindProperty(SupportsGet = true)]
public bool ForUserOnly { get; set; }

使用上面的代码,处理程序方法将变为无参数

public async Task OnGetAsync()
{
    // do something here
}

您提交的URL将成为https://youhost.com?date=value&forUserOnly=value

如果您使用OnGetAsync处理程序方法来绑定提交的模型,则不需要[BindProperty]属性,甚至不需要公共属性。由于提交的值将被传递到处理程序方法。这完全取决于您最终决定使用哪种方法。

public async Task OnGetAsync(DateTime date, bool forUserOnly)
{
}

我希望对您有帮助