【问题标题】:Exclude some child members from getting validated将某些子成员排除在验证之外
【发布时间】:2012-06-09 07:04:46
【问题描述】:

要注册新成员,我有一个名为 UserRegisterModel 的 ViewModel。这个模型从用户那里得到两种地址,他的HomeAddress必需的和他的WorkAddress可选的。为了获取地址,我使用了一个名为 ContactEntryModel 的复杂类型。我用[Required] 属性装饰了我的ContactEntryModel 成员,这会导致家庭和工作地址都得到自动验证。

我正在寻找将 WorkAddress 标记为 IgnoredExcluded 的解决方案,并通过它告诉验证引擎停止验证 WorkAddress 子属性,即使它们使用验证进行了装饰属性。

public class UserRegisterModel
    {
        [StringLength(50), Required]
        public string FirstName { get; set; }
        [StringLength(50), Required]
        public string LastName { get; set; }
        [StringLength(10), Required]
        public string IdCardNo { get; set; }
        [StringLength(100), Email]
        public string Email { get; set; }

        public ContactEntryModel HomeContact { get; set; }  //Required

        public ContactEntryModel WorkContact { get; set; }  //Optional
     }


   public class ContactEntryModel
    {
        [MaxLength(4), Required]
        public string TelPrefix { get; set; }
        [MaxLength(10), Required]
        public string Tel { get; set; }
        [MaxLength(50), Required]
        public string Province { get; set; }
        [MaxLength(50), Required]
        public string City { get; set; }
        [MaxLength(300), Required]
        public string AddressLine { get; set; }
        [MaxLength(20)]
        public string PostalCode { get; set; }
    }

【问题讨论】:

  • 你有没有得到这个答案?
  • 我最终创建了两个不同的 ContactEntryModel,一个用于必需地址,另一个用于可选地址。为了保持这两个模型兼容,我使用了一个基类,它包含所有成员,但没有任何验证属性。

标签: asp.net-mvc validation


【解决方案1】:

最好的方法是创建一个自定义视图模型,根据您的情况进行适当装饰。

另一个版本是告诉您的模型绑定器忽略字段(这也会跳过验证)。您可以使用 Bind 属性执行此操作:

[Bind(Exclude="WorkAddress")]
public ActionResult DoSomething(UserRegisterModel model)
{
    //controller code here
}

【讨论】:

  • 谢谢,但从绑定中排除该属性也使其无法被用户更改。我不希望这样,我只是想让它成为一个可选属性(如果他愿意,用户仍然应该能够输入他的 WorkAddress)
  • 那么为什么不删除所需的属性呢?
  • 因为我有一个联系人是required,一个是optional,请再次阅读我的问题以了解我的意思
  • 我已经在使用自定义视图模型,关键是我不想在我的模型中为每个地址条目有 6 个不同的成员,而某些模型可能有 3 个或更多不同的地址条目,所以我在另一个名为 ContactEntryModel 的视图模型中聚合了这些条目,现在我需要某种条件验证。
猜你喜欢
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多