0

在我的业务领域中,“用户”实体与单个“人员”实体相关联(因此用户实例包含安全/登录信息,但人员实体包含人员的联系信息)。

我的 ViewModel 看起来像这样:

class UserViewModel {
    [Required]
    public String UserName { get; set; }

    public Int64 PersonId { get; set; }
    public PersonViewModel Person { get; set; }

    public Boolean PersonViewModelIsNew { get; set; }
}

class PersonViewModel {
    [Required]
    public String FirstName;
    [Required]
    public String LastName;
    // etc
}

该网页允许访问者编辑用户,以便他们可以用全新的个人实例或从数据库中提取的现有个人替换用户的个人信息。

附上表格截图:

表格截图

这个想法是,如果选择了“另一个员工”单选按钮(映射到“UserViewModel.PersonViewModelIsNew”属性),那么“UserViewModel.Person”成员的验证将被禁用。

但是 ASP.NET MVC 没有像 WebForms 那样的验证组的概念,那么我怎样才能控制这样的验证呢?

4

2 回答 2

1

我想这更像是一个绑定问题而不是验证问题(因为验证发生在绑定之后)。

我发现一种解决方案是使用 [Bind(Exclude="Person")] 标记 ViewModel,并在我的 Action 方法中执行此操作:

if( model.PersonViewModelIsNew ) {
    TryUpdateModel( model.Person, "Person" );
}

if( !ModelState.IsValid ) return View( model );

// Update DB here

这种方法目前似乎有效。

于 2012-04-22T22:12:33.143 回答
0

MVC Foolproof Validation 项目添加了一些很好的验证规则,这些规则涵盖了 ASP.NET MVC 中包含的验证器未涵盖的某些情况,例如 RequiredIfTrue Validation 属性,它看起来与您需要的类似。

当然,如果您有特殊要求,您可以编写自定义验证规则,通过继承 ValidationAttribute 类来创建自定义验证属性,您还可以选择在客户端提供验证。

于 2012-04-22T21:43:09.737 回答