C# 使用ASP.NETMVC模型值验证另一个模型值?
我有一个这样的模型课:C# 使用ASP.NETMVC模型值验证另一个模型值?,c#,validation,model,asp.net-mvc-3,C#,Validation,Model,Asp.net Mvc 3,我有一个这样的模型课: public class SomeClass { public int EmployeeId {get;set;} public int DayTotal {get;set} } 对于这个模型类,我正在为“DayTotal”属性创建一个自定义ValidationAttribute。自定义验证器将根据定义允许的最大天数的另一个表检查输入的值“DayTotal” 在验证程序中编写查询时,如何从Create视图中引用所选的“EmployeeId” public
public class SomeClass
{
public int EmployeeId {get;set;}
public int DayTotal {get;set}
}
对于这个模型类,我正在为“DayTotal”属性创建一个自定义ValidationAttribute。自定义验证器将根据定义允许的最大天数的另一个表检查输入的值“DayTotal”
在验证程序中编写查询时,如何从Create视图中引用所选的“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 = ???
}
}
更新:
我的解决方案采取了不同的方法。这些有用的答案让我想到了其他地方。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!");
}
public类SomeClass:IValidateObject
{
public int EmployeeId{get;set;}
public int daytottal{get;set;}
公共IEnumerable验证(ValidationContext ValidationContext)
{
ProjectDBContext db=新建ProjectDBContext();
//检查maxes…可以在LINQ查询中直接引用EmployeeId
如果(失败)
{
返回新的ValidationResult(“天数已达到最大值!”);
}
在.NET 4.0中,有一个接受参数的for-IsValid。它有一个属性,您可以将该属性转换为某个类,并允许您访问其其他属性。完全正确,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);
}
}
我越来越接近了。线'var(model)=(SomeClass..)编译得很好,但当我实际运行程序并在中输入一些值时抛出一个“InvalidCastException”。有什么想法吗?@John M:ObjectInstance的类型应该是ViewModel的类型。因此,如果使用“SomeClass”作为视图的模型,它应该很好。你能在调试器中看到ObjectInstance的实际类型吗?调用Validate(..)时,如何在validationContext中传递?