Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据第二个模型的属性进行验证_C#_.net_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 根据第二个模型的属性进行验证

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来创建自己的验证规

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

我试图遵循在模型级别执行所有验证的惯例(不仅因为这是我所读到的建议,还因为有人说桌面应用程序可能会使用模型的一部分,所以我想确保在该应用程序中也实施任何约束!)

我的问题是,我有一些关于Person类的数据(RemainingHoliday)。创建度假请求时,我希望确保请求的天数不会超过该人员剩余的天数

我该怎么做呢?我知道我可以通过扩展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
}
公共类人物
{
公共字符串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字段