1

在 RazorPage 中,我提交了一个表单,但在模型OnPost()中, Request.Form["myfield"] 为空。

<form method="post">
<input id="myfield"/>
<button type="submit">Submit</button>
</form>

但是如果我在模型中添加一个类级别的属性:

public string myfield { get; set; }

并更新表单以使用 TagHelper:

<form method="post">
<input asp-for="myfield"/>
<button type="submit">Submit</button>
</form>

Request.Form["myfield"]当它到达 OnPost() 中的断点时填充。但实际属性为 null in OnPost()

有谁明白发生了什么?意义:

为什么不Request.Form["myfield"]填充类级别属性?

为什么不填充属性?

-- 编辑 --
第一部分因为我使用id的是name.

仍然不确定关于asp-for和模型属性的第二部分。

4

1 回答 1

3

Razor 页面与自动填充这些表单字段的 Web 表单不同。它们更像是一个简化的 MVC 控制器。

您可以通过将其作为参数添加到您的 post 方法来指定传递所有表单字段:

public async Task<IActionResult> OnPostAsync(IFormCollection data) {
   var myField = data["myField"];
   ...
}

使用 Bindable 属性是在客户端和服务器之间持久化数据的首选方式。

于 2017-12-15T21:04:03.337 回答