我有一个带有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)
问题是,我应该使用哪一个?彼此的好处是什么?
答案 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)
{
}
我希望对您有帮助