【发布时间】:2018-02-20 14:09:54
【问题描述】:
我有一个基于域模型的基本“创建”视图,因此它被键入到模型中
@model TblProduct
<form asp-controller="Product" asp-action="Create">
...
<input asp-for="Artist" class="form-control" />
...
我正在尝试添加功能并改用视图模型,我从一个非常基本的视图模型开始,其中只有该域模型:
public class ProductViewModel
{
public TblProduct P { get; set; }
}
现在我已将“创建”视图改为使用视图模型
@model ProductViewModel
<form asp-controller="Product" asp-action="Create">
...
<input asp-for="P.Artist" class="form-control" />
...
所以我希望模型是有效的,因为(除了编辑变量名)我从表单中填充了所有相同的字段,实际上没有其他字段被添加到模型中。
发布表单时发生错误,我将 ProductViewModel 参数传递给 create 方法,但检查时它为空。但是 ModelState.IsValid 是真的。所以代码尝试写入数据库并失败。
public async Task<IActionResult> Create([Bind("ID,Artist,ProductTitle... (long list removed)...] ProductViewModel productAndItems)
{
var prod = productAndItems.P;
if (ModelState.IsValid)
{
_context.Add(prod);
...FAIL
知道我应该在这里检查什么 - 我错过了什么吗?
如何获取视图(键入到视图模型)以将模型数据传递给控制器?如果它为空,ModelState.IsValid 怎么可能是真的?上面我调试过的例子,productAndItems传入的参数为null。
【问题讨论】:
标签: asp.net-core asp.net-core-mvc viewmodel