Asp.net mvc MVC域模型验证
在我的域模型中,我有一个Person对象,它有许多属性,我用验证元数据修饰了这些属性: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; } 我的控制器将一组人员返回到视图,以便用户可以填写他们的详细信息。但是,只有第一个人需要提供年
[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页