【问题标题】:ASP.NET CORE mapping complex POST [FromForm] pure html/http protocolASP.NET CORE 映射复杂 POST [FromForm] 纯html/http协议
【发布时间】: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


    【解决方案1】:

    大声笑,你肯定不会喜欢这个答案。在您的视图中,您需要将字段名称(行)更改为行,以便它与控制器操作参数的名称匹配。

    为了正确起见,您应该在视图的隐藏字段中使用日期而不是日期(但即使您不更改它也会起作用):)

    【讨论】:

    • 我想我是愚蠢的不去检查。确实我不喜欢这个答案:) 非常感谢
    猜你喜欢
    • 2020-01-18
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 2011-02-18
    • 1970-01-01
    • 2014-03-02
    • 2012-04-19
    相关资源
    最近更新 更多