【发布时间】:2016-01-06 11:48:40
【问题描述】:
所以,我有一个User 模型类。它有UnitViewModel的列表。
public class UserViewModel
{
[Required(ErrorMessage="FirstName")]
public string FirstName { get; set; }
[Required(ErrorMessage = "LastName")]
public string LastName { get; set; }
public List<UnitViewModel> DesiredUnits { get; set; }
}
public class UnitViewModel
{
public Guid? UnitID { get; set; }
[Required(ErrorMessage = "NAMEEE")]
public string Name { get; set; }
public bool Selected { get; set; }
}
当我尝试创建新的User 时,我会从我的角度发布UserViewModel。在这里我得到ModelState.IsValidfalse。发生这种情况是因为验证还检查了为空的UnitViewModel.Name 属性(这是正常的,因为我创建了User 并且我有UnitViewModel 的checkbox 列表。用户从现有的UnitViewModel 列表中选择UnitViewModel)。
我可以通过 foreach 循环以ModelState["DesiredUnits[0].UnitID"].Errors.Clear() 的可怕方式修复它,但我不会。
那么,解决方案是什么?如何禁用模型复杂属性列表的验证?
更新
我目前使用的另一个解决方案是在UnitViewModel 的编辑器模板中添加HiddenFor(m=>m.Name),但这种方法的缺点是当我在编辑器模板中已经有标签时Name 是不必要的。此外,如果我有更多必填字段,我将必须为每个字段设置相应的隐藏输入。
【问题讨论】:
-
您能否以没有任何字段链接 DesiredUnits 属性的方式呈现您的创建视图?这样 UnitViewModel 列表将保持为空,并且没有完成名称验证
-
我有
EditorTemplate用于DesiredUnits,它有UnitID和Name。在创建User时,我必须展示它,因为他们需要选择所需的单位 -
然后尝试使用可为空的 DesiredUnits
-
DesiredUnits的类型是 List 所以,它本身可以为空
标签: c# asp.net-mvc validation modelstate complextype