【发布时间】:2020-07-07 13:15:02
【问题描述】:
假设我有一个这样的视图模型:
public class MyViewModel
{
//...Other properties and methods...
public MyEntity Entity { get; set;}
}
我在 view.cshtml 中使用 MyViewModel
@model MyViewModel
但是 POST 控制器方法绑定到 MyEntity 类,因为这就是操作所需的全部内容。
[HttpPost]
public IActionResult Add(MyEntity entityDetails)
{
if (ModelState.IsValid)
//if valid
return View(new MyViewModel { Entity = entityDetails });
}
问题是在验证 MyEntity 时,ModelState 包含该类的本地属性名称,而视图使用父“MyViewModel”类。当我尝试检索实体的错误时,它找不到任何错误,因为 ModelState 字典将包含像“Name”而不是“Entity.Name”这样的键。
<form asp-action="Add" method="post">
<input type="text" id="name" name="Name" class="form-control" />
<span asp-validation-for="Entity.Name" class="text-danger"></span>
有没有办法解决这个问题?如果我可以指定“回发”模型以及“视图”模型,那就太好了。或者,如果有一种方法可以修改 ModelState 以在键前面加上“Entity.”。或者强制 asp-validation-for="Name" 代码忽略编译错误(这是因为它找不到属性)。
还要注意,在添加控制器操作中使用 MyViewModel 并不理想。我不会详细介绍,但在我看来这会让事情变得很尴尬。我可能会这样做,但我想考虑其他选择。
【问题讨论】:
标签: c# validation asp.net-core asp.net-core-mvc