假设我得到了以下实体框架“Ruimte”模型:
public class Ruimte
{
#region Constructor
public Ruimte()
{
Kenmerken = new List<Kenmerk>();
}
#endregion
#region Properties
[Key]
public int Id
{
get;
set;
}
[Required]
public string Naam
{
get;
set;
}
public List<Kenmerk> Kenmerken
{
get;
set;
}
#endregion
}
“Kenmerk”模型如下所示:
public class Kenmerk
{
#region Properties
[Key]
public int Id { get; set; }
public KenmerkOptie KenmerkOptie
{
get;
set;
}
[Required]
public int KenmerkOptieId
{
get;
set;
}
[Required]
public string Waarde
{
get;
set;
}
[Required]
public int RuimteId
{
get;
set;
}
#endregion
}
在我的Ruimte / Create视图中,有2个字段用于添加“Kenmerk”。现在,如果没有KenmerkOptieId或Waarde,“Kenmerk”就无法进入数据库。因此,每次我尝试发布表单时,视图都会拒绝提交,因为验证。虽然我想要一个“Ruimte”拥有或不拥有“Kenmerk”。
所以我选择的解决方案是使用“RuimteCreateViewModel”,其中包含所需的属性“Name”以及另一个名为“KenmerkCreateViewModel”的copmlex类的列表。现在在最后一个视图模型中,KenmerkOptieId和Waarde不是必需的,所以我最终可以提交表单。
虽然我不认为这是“跳过”所需字段验证器的最佳解决方案。那么,当数据库验证与视图验证不同时,您的“最佳实践”是什么?
答案 0 :(得分:1)
我认为xVal-- ASP.NET MVC的验证框架,请参阅http://blog.stevensanderson.com/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/对于您正在尝试开发的实体框架模型非常有用。特别是使用强制执行服务器端验证,它允许您选择在属性设置器期间验证简单的属性格式设置规则。有关说明,请参阅http://blog.stevensanderson.com/2008/09/08/thoughts-on-validation-in-aspnet-mvc-applications/。