ASP.NET Core MVC模型绑定到列表返回POST方法中的空列表?

时间:2017-05-20 09:06:25

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

我在将数据绑定正常工作到视图模型类中的列表时遇到问题。我在ASP.NET Core 1.1.2中使用它。

这些是我的视图模型类:

public class ParameterViewModel
{
    public int ParameterValue { get; set; }
}

public class ConfigurationViewModel
{
    public List<ParameterViewModel> Parameters;

    public ConfigurationViewModel()
    {
        this.Parameters = new List<ParameterViewModel>();
    }
}

我还为ParameterViewModel类定义了一个相应的视图模板:

@model HomeAutomationWeb.ViewModels.ParameterViewModel
<div>@Html.EditorFor(model => model.ParameterValue)</div>

我已验证视图模板是否正常工作。

这是我控制器中的Get方法:

[HttpGet]
public IActionResult Index()
{
    var vm = new ConfigurationViewModel();
    vm.Parameters.Add(new ParameterViewModel());
    vm.Parameters.Add(new ParameterViewModel());

    return View(vm);
}

并且视图如下所示:

@model HomeAutomationWeb.ViewModels.ConfigurationViewModel

<form asp-controller="Test" asp-action="Index" method="post">
    @for (var i = 0; i < Model.Parameters.Count; i++)
    {
        @Html.EditorFor(model => model.Parameters[i]) // binding works only with items which are accessed by indexer
    }
    <input type="submit" value="Update" />
</form>

最后这是我控制器中的Post方法:

[HttpPost]
public IActionResult Index(ConfigurationViewModel vm)
{
    if (ModelState.IsValid)
    {
        // Update
    }

    return View(vm);
}

问题是vm.Parameters列表在我的Post方法中包含零元素。

我已经验证了数据绑定回我的模型适用于我的ConfigurationViewModel类的简单属性(如int),但它对使用List的属性不起作用。

这是生成的HTML:

<form method="post" action="/Test">
<div>
    <input class="text-box single-line" data-val="true" data-val-required="The ParameterValue field is required." id="Parameters_0__ParameterValue" name="Parameters[0].ParameterValue" type="number" value="0" />
</div>

<div>
    <input class="text-box single-line" data-val="true" data-val-required="The ParameterValue field is required." id="Parameters_1__ParameterValue" name="Parameters[1].ParameterValue" type="number" value="0" />
</div>

    <input type="submit" value="Update" />
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8Gpzz17DaqNCiNs_dLveO7S-kCKBOQ3lruobvlEbk8GO9pqH_qZpj_yn8YoAUxJuHu2me9e2-i2HZ0hG4CfvALnEwyOTMWACPhqAv6KF2uWPjGx3M2gW6G6hGhPly0FovX31iuhzxAllPkoRzaDluEz8nZzOeDY7ojPKkdnj3RMuQ7hw2K861Rc0Pw7iL5_viQ" /></form>

我的代码有什么问题?

0 个答案:

没有答案