【发布时间】:2017-05-11 16:15:19
【问题描述】:
我正在开发一个视图,该视图通过浏览器 (Chrome) 中的 POST 方法将数据“数组”发送到服务器。不涉及 Json/Javascript
这是浏览器发送的内容:
row[0].date:01/05/2017 00:00:00
row[0].Status:0
row[1].date:02/05/2017 00:00:00
row[1].Status:0
row[2].date:03/05/2017 00:00:00
row[2].Status:0
row[3].date:04/05/2017 00:00:00
row[3].Status:0
row[4].date:05/05/2017 00:00:00
row[4].Status:0
...
我的模特
public class Info
{
public int Status { get; set; }
public string Date { get; set; }
}
基本上是我的代码:
//HomeController : Controller
[HttpGet("/status")]
public IActionResult Status()
{
return View();
}
[HttpPost("/status")]
public void StatusPost(Info[] rows)
{
var data = System.Text.Encoding.UTF8.GetBytes($"rows = {rows.Length}");
this.Response.Body.Write(data, 0, data.Length);
}
在StatusPost方法中,我尝试添加属性[FromBody],[FromForm]。 我也尝试过使用对象列表。
我也尝试过这样的主对象:
public class row
{
public List<info> info { get; set; }
}
public class info
{
public int status { get; set; }
public string date { get; set; }
}
Html/Razor
<form method="post" action="/status" enctype="application/x-www-form-urlencoded">
<button type="submit">Submit</button>
<table class="table table-bordered">
<thead>
<tr>
<th>Date</th>
<th>Status</th>
</tr>
</thead>
<tbody>
@{
DateTime startDate = new DateTime(2017, 05, 01);
}
@for (int i = 0; i < 20; i++)
{
var date = startDate.AddDays(i);
<tr>
<td style=" text-align: center; vertical-align: middle;" rowspan="1">
@(date.ToString("ddd, MMM yyyy"))
<input type="hidden" name="row[@i].date" value="@(date.ToString())" />
</td>
<td>
<select name="row[@i].Status">
<option value="0" selected>Working</option>
<option value="1">Bug</option>
</select>
</td>
</tr>
}
</tbody>
</table>
</form>
我尝试使用“multipart/form-data”和“application/x-www-form-urlencoded”作为表单的编码类型。
我尝试了很多,现在我迷路了,我不知道如何绑定服务器端,而不必通过解析 Request.Post 字典手动创建我的对象。
有可能吗? 这种向服务器发送数据的方式是怎么调用的?
我看到了这篇文章,我尝试过,但也没有成功: Asp.Net Core Post FromBody Always Null
【问题讨论】:
标签: html post asp.net-core asp.net-core-mvc