模型
public class ChildModel
{
public string Item1 { get; set; }
public string Item2 { get; set; }
}
public class ParentModel
{
public ChildModel Child { get; set; }
}
查看
<div class="row">
<div class="col-sm-8">
<p>@Model.Child.Item1</p>
<p>@Model.Child.Item2</p>
<form asp-controller="home" asp-action="submit" method="post">
<input asp-for="Child.Item1" hidden />
<input asp-for="Child.Item2" hidden />
<div class="form-group">
<button type="submit" class="btn btn-dark mr-2 px-4">Submit</button>
</div>
</form>
</div>
</div>
[HttpGet]
public IActionResult Index()
{
return View(new ParentModel
{
Child = new ChildModel
{
Item1 = "Item 1",
Item2 = "Item 2",
}
});
}
[HttpPost]
public IActionResult Submit(ChildModel m)
{
//ModelState.IsValid is true, but m.Item1 is null and m.Item2 is null
if (!ModelState.IsValid)
return View(m);
return RedirectToAction("index");
}
我要做的是回复我的模特的一个成员。我的假设是MVC模型绑定将从表单数据中获取Item1
和Item2
成员,我将能够在我的Submit
帖子中访问它们。但在Submit
方法中,Item1
和Item2
始终为空。
请问你能说明我做错了什么,或者可能采用其他方法来达到同样的效果?
答案 0 :(得分:1)
由于您正在修改模型结构,因此需要更改输入的名称:
<input asp-for="Child.Item1" name="Item1" hidden />
<input asp-for="Child.Item2" name="Item2" hidden />
否则,生成的HMTL看起来像... name="Child.Item1"...
,并且由于您的模型没有Child
属性,如您所见,它会失败。