C# 根据第二个模型的属性进行验证
作为我在工作中学习新技能目标的一部分,我正在尝试用ASP.NETMVC(MVC4)开发一个员工管理系统 我试图遵循在模型级别执行所有验证的惯例(不仅因为这是我所读到的建议,还因为有人说桌面应用程序可能会使用模型的一部分,所以我想确保在该应用程序中也实施任何约束!) 我的问题是,我有一些关于Person类的数据(RemainingHoliday)。创建度假请求时,我希望确保请求的天数不会超过该人员剩余的天数 我该怎么做呢?我知道我可以通过扩展ValidationAttribute来创建自己的验证规则,但是如何从HolidayRequest类到这里的Person类呢 模型的一个片段:C# 根据第二个模型的属性进行验证,c#,.net,asp.net-mvc,asp.net-mvc-4,C#,.net,Asp.net Mvc,Asp.net Mvc 4,作为我在工作中学习新技能目标的一部分,我正在尝试用ASP.NETMVC(MVC4)开发一个员工管理系统 我试图遵循在模型级别执行所有验证的惯例(不仅因为这是我所读到的建议,还因为有人说桌面应用程序可能会使用模型的一部分,所以我想确保在该应用程序中也实施任何约束!) 我的问题是,我有一些关于Person类的数据(RemainingHoliday)。创建度假请求时,我希望确保请求的天数不会超过该人员剩余的天数 我该怎么做呢?我知道我可以通过扩展ValidationAttribute来创建自己的验证规
public class Person
{
public string PersonID { get; set; } // this is populated with Users AD Guid
public string HolidayEntitlement { get; set; }
public virtual ICollection<HolidayRequest> Holidays { get; set; }
public int TotalEntitlement(int year = -1)
{
return this.HolidayEntitlement + this.HolidayAdjustments.Where(a => a.LeaveYear.Year == year).Sum(a => a.Adjustment);
}
public int RemainingHoliday(int year = -1)
{
return this.TotalEntitlement(year) - this.Holidays.Where(h => h.Start.Year == year).Where(h => h.Status != HolidayStatus.Rejected).Sum(h => h.Duration);
}
}
public class HolidayRequest
{
public string HolidayId { get; set; }
public DateTime Start { get; set; }
public DateTime Finish { get; set; }
public int Duration { get; set; } // This cannot be greater than Person.RemainingHoliday
}
公共类人物
{
公共字符串PersonID{get;set;}//由用户AD Guid填充
公共字符串HolidayAuthentication{get;set;}
公共虚拟ICollection假日{get;set;}
公共整数总权利(整数年=-1)
{
返回this.holidayAuthentication+this.HolidayAdjustments.Where(a=>a.LeaveYear.Year==Year).Sum(a=>a.Adjustment);
}
公共国际剩余假日(国际年=-1)
{
返回this.totalauthentication(year)-this.Holidays.Where(h=>h.Start.year==year)。Where(h=>h.Status!=HolidayStatus.Rejected)。求和(h=>h.Duration);
}
}
公务舱度假申请
{
公共字符串HolidayId{get;set;}
公共日期时间开始{get;set;}
公共日期时间完成{get;set;}
public int Duration{get;set;}//不能大于Person.RemainingHoliday
}
我真的很感激任何关于这一点的指针或示例,或者我试图太过理想,而这在模型中无法实现?似乎您在HolidayRequest对象中缺少对请求度假的人的引用。我本来希望在HolidayRequest对象中看到一个人或PersonId。到达后,您可以计算Duration和RemainingHoliday之间的差异。我使用的是实体框架,因此引用由Person类上的虚拟ICollection负责,至少我的requests DB表中似乎有一个PersonId字段