【问题标题】:Why is Request.Form["myfield"] empty unless property is available?除非属性可用,否则为什么 Request.Form["myfield"] 为空?
【发布时间】:2018-05-29 22:40:43
【问题描述】:

在 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() 中的断点时被填充。但是OnPost()中的实际属性为null。

有人知道发生了什么吗?含义:

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

为什么不填充属性?

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

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

【问题讨论】:

  • asp-for 还设置了 name 属性 - 您是否尝试在您的第一个代码 sn-p 中设置它?
  • 你能提供一个代码 sn-p 看起来像什么吗?没有 asp-name 属性。
  • 我的意思是在没有asp-for 的情况下尝试&lt;input id="myfield" name="myfield" /&gt;(您的第一个代码示例)。我觉得它消失了 name 而不是 id
  • 你是对的。是名字。这解决了一个问题。您对 asp-for 和 property 问题有任何想法吗?我更新了 OP。
  • 尝试添加BindProperty 属性,即[BindProperty] public string myfield { get; set; }。这可能只适用于类,而不是简单的字符串。如果是这种情况,请告诉我,我可以发布一个答案来解释它是如何工作的。

标签: c# razor-pages asp.net-core-tag-helpers


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-09-06
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 2014-01-19
    • 2020-03-29
    • 1970-01-01
    相关资源
    最近更新 更多