Asp.net mvc MVC域模型验证

Asp.net mvc MVC域模型验证,asp.net-mvc,Asp.net Mvc,在我的域模型中,我有一个Person对象,它有许多属性,我用验证元数据修饰了这些属性: [Required(ErrorMessage = "First Name Required")] public string FirstName { get; set; } [Required(ErrorMessage = "Age Required")] public int Age { get; set; } 我的控制器将一组人员返回到视图,以便用户可以填写他们的详细信息。但是,只有第一个人需要提供年

在我的域模型中,我有一个Person对象,它有许多属性,我用验证元数据修饰了这些属性:

[Required(ErrorMessage = "First Name Required")]
public string FirstName { get; set; }

[Required(ErrorMessage = "Age Required")]
public int Age { get; set; }
我的控制器将一组人员返回到视图,以便用户可以填写他们的详细信息。但是,只有第一个人需要提供年龄,因此我只需要验证集合中第一个人的年龄

但是,由于年龄属性上的验证元数据,模型验证失败,因为没有为集合中的其他人提供年龄

是否有任何方法可以关闭集合中其他Person对象的验证


或者我需要重新安排我的模型。

我的本能是用一个自定义属性来修饰动作或控制器,以拦截请求的验证。例如,在ValidateOnlyFirstPersonInCollection属性中,可以按如下方式重写OnActionExecuting方法:

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var modelState= filterContext.Controller.ViewData.ModelState;
    var incomingValues = filterContext.Controller.ValueProvider;
    // depending on how your app works, 
    // ascertain the Condition that applies when you want the       age field validated
    // Then:
    var keys = modelState.Keys.Where(x => ![Condition]);
   foreach(var key in keys) // These keys don't satisfy the Condition for validation
     modelState[key].Errors.Clear();
}
你的问题现在归结为弄清情况。上面给出了一个粗略的想法。有关更多详细信息,请参阅Steve Sanderson关于MVC 2的书,第486页