如何在 MVC Core 中绑定数组

Joh*_*ohn 4 model-binding asp.net-core-mvc asp.net-core

我尝试在 Action 中绑定这样的对象

public class MonthDataViewModel
{
    public int Year { get; set; }
    public int Month { get; set; }
    public IEnumerable<MoneyDataItemViewModel> MoneyCosts { get; set; }  
}
public class MoneyDataItemViewModel
{
    public string Title { get; set; }
    public decimal Cost { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

那可能吗?我该如何设计表格?我尝试了几次,但该属性MoneyCosts不会被绑定,这是我提交的数据:

Year=2016
Moneh=8
MoneyCosts.Title=ABC
MoneyCosts.Cost=100
MoneyCosts.Title=DEF
MoneyCosts.Cost=200
Run Code Online (Sandbox Code Playgroud)

我看到一个名为 的 modelbinder ArrayModelBinder<T>,我该如何使用它?

ade*_*lin 5

如果您使用x-www-url-formencoded内容类型,请尝试更改(如果可能)您的帖子数据,如下所示:

Year=2016&Month=8&MoneyCosts[0].Title=ABC&MoneyCosts[0].Cost=100&MoneyCosts[1].Title=DEF&MoneyCosts[1].Cost=200
Run Code Online (Sandbox Code Playgroud)

我该如何设计表格?

<form asp-controller="Home" asp-action="AccountName" method="post">
    <input type="text" name="Year" />
    <input type="text" name="Month" />
    @for(var i = 0; i < count; i++)
    {
        <input type="text" name="@("MoneyCosts["+ i + "].Title")" />
        <input type="text" name="@("MoneyCosts["+ i + "].Cost")" />
    }
    <input type="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

如果您使用json内容类型,您的数据应该是这样的:

{"Year": "2016", "Month":"8", "MoneyCosts":[{"Title":,"ABC"}, ...]}
Run Code Online (Sandbox Code Playgroud)

如果有请求,您应该在操作方法中json使用。FromBody

    [HttpPost]
    public IActionResult ActionName([FromBody]MonthDataViewModel model)
Run Code Online (Sandbox Code Playgroud)