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)
@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)
| 归档时间: |
|
| 查看次数: |
5524 次 |
| 最近记录: |