【问题标题】:How to bind an Array in MVC Core如何在 MVC Core 中绑定数组
【发布时间】:2019-11-07 01:10:09
【问题描述】:

我尝试在 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; }
}

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

Year=2016
Moneh=8
MoneyCosts.Title=ABC
MoneyCosts.Cost=100
MoneyCosts.Title=DEF
MoneyCosts.Cost=200

我看到了一个叫 ArrayModelBinder&lt;T&gt; 的模型绑定器,我该如何使用它?

【问题讨论】:

    标签: asp.net-core asp.net-core-mvc model-binding


    【解决方案1】:

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

    Year=2016&Month=8&MoneyCosts[0].Title=ABC&MoneyCosts[0].Cost=100&MoneyCosts[1].Title=DEF&MoneyCosts[1].Cost=200
    

    我如何设计表格?

    <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>
    

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

    {"Year": "2016", "Month":"8", "MoneyCosts":[{"Title":,"ABC"}, ...]}
    

    json 请求的情况下,您应该在操作方法中使用FromBody

        [HttpPost]
        public IActionResult ActionName([FromBody]MonthDataViewModel model)
    

    【讨论】:

    • 古代线程 - 我知道,对不起,但有没有办法利用标签助手和发布 json 内容类型数据?
    • @Dynde 你可以自己写JsonFormTagHelper,在&lt;/form&gt;之前或之后附加javascript,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 2015-03-20
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 2012-09-14
    相关资源
    最近更新 更多