如何在操作方法中绕过必需的数据注释

时间:2015-01-18 16:25:49

标签: asp.net-mvc entity-framework model-view-controller asp.net-mvc-5 data-annotations

我的数据库中有一个包含AD个用户信息的表。某些表属性将使用同步作业(例如名字,姓氏,电子邮件地址等)进行更新,而其他表将由我的系统内的用户添加,例如主要角色,次要角色,OverAll性能等。 我在模型类中将这些值设置为Required,而它们在DB中允许空值: -

public class SyncADUsers
{
    [Required]
    [StringLength(200)]
    public string PrimaryRole { get; set; }

    [StringLength(250)]
    public string SecondaryRole { get; set; }

    [Required]
    public int OverAllPerfomance { get; set; }

    [Required]
    [StringLength(50)]
    public string FirstName { get; set; }

    [Required]
    [StringLength(50)]
    public string LastName { get; set; }

}

但问题是,当同步作业启动时,它将引发验证错误,即添加到AD但尚未添加到我的系统的任何新用户都需要主角色,辅助角色,OverAllPerformance。但是我需要仅在用户尝试更新系统内的用户信息时才需要这些字段,但是当同步作业开始工作时通过此验证(特别是添加到AD的新用户,但尚未添加到我的系统数据库..) 有人可以就此提出建议吗? 感谢

1 个答案:

答案 0 :(得分:1)

解决问题的最佳方法是根据真实的数据库模型创建单独的模型。

我将通过一个简单的例子向您展示我的意思:

在我的数据库用户模型中,我有:usernamepasswordname,让我们说。

当有人想要注册时,我需要用户输入所有这些值,这意味着我可以将数据库模型用于视图和控制器,并且所有这些属性都将具有[Required]数据注释(MVC)。这将完美地运作,对吧?

但是,当用户想要登录时,我们不需要name属性。如果我们尝试使用与用户注册时相同的数据库用户模型,则会出现问题。它将向我们显示模型状态(MVC)无效,因为我们在属性[Required]上有name,但我们不允许用户在登录时输入。

解决方案:例如,创建仅用于登录视图的新模型。该模型将仅保留用户的usernamepassword。您可以查询数据库并检查用户名/密码组合是否正确等等。