【发布时间】:2018-02-16 01:39:53
【问题描述】:
为什么当我提交表单时,控制器没有收到来自 Model.Items 的任何数据? 我正在使用 asp.net core mvc 2.0
这是我的视图模型
public class SectionVM
{
public long Id { get; set; }
[Required]
public string Name { get; set; }
public string Description { get; set; }
public ICollection<SectionItemCollector> Items { get; set; }
}
public class SectionItemCollector
{
public bool IsSelected { get; set; }
public long ItemId { get; set; }
public string ItemName { get; set; }
}
在这里,我创建了一个新的视图模型,用数据填充它并将其发送到视图。视图接收视图模型,我目前能够毫无问题地访问视图模型中的所有数据。
// Controller Actions
// GET: MenuSections/Create
public async Task<IActionResult> Create()
{
var viewModel = new SectionVM();
var allItems = await _context.MenuItem.ToListAsync();
var vmItems = new List<SectionItemCollector>();
foreach (var i in allItems)
{
vmItems.Add(new SectionItemCollector() { IsSelected = false, ItemId = i.Id, ItemName = i.Name });
}
viewModel.Items = vmItems;
return View(viewModel);
}
我的视图显示视图模型中包含的数据,用户可以选择选择一些项目
// View
@model ROO_App.Models.SectionVM
...
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Description" class="control-label"></label>
<input asp-for="Description" class="form-control" />
<span asp-validation-for="Description" class="text-danger"></span>
</div>
<div class="form-group">
@{
foreach (var item in Model.Items)
{
<div class="row">
<div class="col-sm-1">
<input asp-for="@item.IsSelected" type="checkbox" class="form-check-input" id="@item.ItemId"/>
</div>
<div class="col-sm-4">@item.ItemName</div>
</div>
}
}
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</form>
表单提交时Items = null
// POST: MenuSections/Create
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,Name,Description, Items")] SectionVM menuSection)
{
...
}
【问题讨论】:
-
您的视图是否指定了模型?它通常是视图的第一行。 @model SectionVM
-
是的,我只是将其包含在问题中以避免混淆,谢谢
标签: razor asp.net-core-mvc model-binding