【问题标题】:How can I bypass Required data annotation inside my action method如何绕过我的操作方法中的必需数据注释
【发布时间】:2023-04-07 13:51:01
【问题描述】:

我的数据库中有一个包含AD 用户信息的表。某些表属性将使用同步作业更新(例如名字、姓氏、电子邮件地址等),而其他属性将由我系统内的用户添加,例如主要角色、次要角色、总体性能等。 我已在我的模型类中将这些值设置为必需,而它们允许在 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 且尚未添加到的新用户上)我的系统数据库..) 有人可以就此提出建议吗? 谢谢

【问题讨论】:

  • 这对我来说没有意义 - 同步作业与您的 MVC 视图模型有什么关系?
  • 抱歉,我似乎没有很好地解释我的问题。现在同步作业将更新从 AD 检索的模型类属性;例如名字、姓氏、电子邮件地址、GUID

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


【解决方案1】:

解决您的问题的最佳选择是基于真实的数据库模型创建单独的模型。

我将通过一个简单的例子告诉你我的意思:

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

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

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

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

【讨论】:

  • 感谢您的回复。但我运行同步作业不是出于授权目的..我需要它来填充我们 HR 系统中的 Employee 表,因此 HR 最终用户不需要手动创建公司用户...顺便说一句,我正在使用 Windows 身份验证登录用户...
  • 正如我在上面所写的,我给你的场景只是一个例子。创建新的“临时”模型可以解决所有问题。只需使用您需要收集的信息创建模型即可。
  • 但是假设我在一个新的视图模型中收集 AD 信息,其中不包括我想要绕过的必需信息。然后为了能够将 AD 数据保存在我的数据库中,我需要通过 SyncADUsers 来执行此操作,该 SyncADUsers 链接到我的数据库中的 SyncADUsers 表?/ 在 SyncADUsers 模型中,我根据需要设置了 Primaryrole 和其他信息..跨度>
  • 当您创建“临时”模型并收集所需数据时,在您的下一个控制器中,在您的情况下为SyncADUsers,您将首先接受此模型,然后从该模型生成新的需要的模型,以便可以更新db。你需要稍微扭曲一下才能使它起作用。
猜你喜欢
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
相关资源
最近更新 更多