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

标签 c# validation model asp.net-mvc-3

我有一个像这样的模型类:

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

对于这个模型类,我正在为“DayTotal”属性创建自定义 ValidationAttribute。自定义验证器将根据定义允许的最长天数的另一个表检查输入的“DayTotal”值。

在验证器中编写查询时,如何从创建 View 中引用选定的“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 = ???
    }
}

更新:

我的解决方案采用了不同的方法。有用的答案让我在其他地方寻找。这blog来自 Scott Gu 的帮助提供了一种更简单的方法:

在我的模型中 ->

   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!");
            }

最佳答案

@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);
    }    
}

关于c# - 使用 ASP .NET MVC 模型值来验证另一个模型值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5019615/

相关文章:

c# - 将数据写入标签

c# - 是否可以在不验证 "sub-models"的情况下验证 MVC-3 模型?

Javascript 验证文本框时出错 IF 所有三个文本框 <> 则 100%

model-view-controller - 胖模型、瘦 Controller 和 MVC 设计模式

python - 如何阻止这种级联删除在 Django 中发生?

c# - MediatR 和 SimpleInjector 的依赖范围问题

c# - Parallel.For 与 Npgsql 一起使用吗?

c# - 如何使用c#更改打印机

java - 解析日期格式时出现问题,需要更改此方法以接受空值

node.js - 如何实现noSQL数据库抽象?