使用ASP .NET MVC模型值来验证另一个模型值?

Joh*_*n M 9 c# validation model asp.net-mvc-3

我有这样的模型类:

public class SomeClass
{
    public int EmployeeId {get;set;}
    public int DayTotal {get;set}
}
Run Code Online (Sandbox Code Playgroud)

对于此模型类,我正在为'DayTotal'属性创建自定义ValidationAttribute.自定义验证器将针对另一个定义允许的最大天数的表检查输入的值'DayTotal'值.

在验证器中编写查询时,如何从"创建"视图中引用所选的"EmployeeId"?

public class DayTotalAttribute : ValidationAttribute
{
    ProjectDBContext db = new ProjectDBContext();

    public override bool IsValid(object value)
    {
        if (value == null)
        {
            return false;
        }

        var products = from p in db.EmployeeDayMax
                       where p.EmployeeId = ???
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:

我的解决方案采取了不同的方法.有用的答案让我在其他地方寻找.此博客由斯科特谷有助于提供一个更简单的方法:

在我的模型中 - >

   public class SomeClass : IValidateObject
   {
         public int EmployeeId {get; set;}
         public int DayTotal {get; set;}

         public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
         {
            ProjectDBContext db = new ProjectDBContext();
            //check maxes...can refer directly to EmployeeId in LINQ queries
            if(failed)
            {
               yield return new ValidationResult("Days have been maxed!");
            }
Run Code Online (Sandbox Code Playgroud)

fre*_*tje 7

@Luke Bennett是完全正确的,ValidationContext是MVC 3中的新功能.

以下是使用您的代码的示例:

public class DayTotalAttribute : ValidationAttribute
{
    ProjectDBContext db = new ProjectDBContext();

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value != null)
        {
            var model = (SomeClass)validationContext.ObjectInstance;
            var products = from p in db.EmployeeDayMax
                       where p.EmployeeId = model.EmployeeId

            bool somethingIsWrong = // do your validation here

            if (somethingIsWrong)
            {
                return ValidationResult("Error Message");
            }
        }

        return base.IsValid(value, validationContext);
    }    
}
Run Code Online (Sandbox Code Playgroud)