我在将数据绑定正常工作到视图模型类中的列表时遇到问题。我在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>
我的代码有什么问题?