验证第二模型的属性

时间:2011-12-08 10:31:01

标签: c# .net asp.net-mvc asp.net-mvc-4

作为我在工作中学习新技能的目标的一部分,我正在尝试在ASP.NET MVC(MVC 4)中开发员工管理系统。

我正在尝试遵循在模型级别执行所有验证的惯例(不仅因为这是我推荐的内容,而且因为有人谈论可能使用模型部分的桌面应用程序,所以我想要确保在该应用程序中强制执行任何约束!)。

我的问题是,我在Person类(RemainingHoliday)上有一些数据。创建HolidayRequest时,我希望确保请求的天数不会超过此人剩余的天数。

我该怎么做呢?我知道我可以通过扩展ValidationAttribute来创建自己的验证规则,但是我如何从HolidayRequest类到达此类中的Person类?

模型片段:

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
}

我真的很感谢任何指针或样品,或者我想尝试太理想,这不能在模型中完成?

1 个答案:

答案 0 :(得分:0)

您似乎错过了对HolidayRequest对象中请求假期的人的引用。我原本希望在HolidayRequest对象中看到Person或PersonId。在那里,你可以计算持续时间和RemainingHoliday之间的差异。