ASP.NET MVC - ViewModel验证最佳实践

时间:2012-12-11 10:31:03

标签: asp.net-mvc entity-framework viewmodel

假设我得到了以下实体框架“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不是必需的,所以我最终可以提交表单。

虽然我不认为这是“跳过”所需字段验证器的最佳解决方案。那么,当数据库验证与视图验证不同时,您的“最佳实践”是什么?

1 个答案:

答案 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/