【问题标题】:Validating Against Property of 2nd Model针对第二个模型的属性进行验证
【发布时间】:2011-12-08 10:31:01
【问题描述】:

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

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

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

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

模型的 sn-p:

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
}

我非常感谢任何关于此的指针或示例,或者我可能试图过于理想而这无法在模型中完成?

【问题讨论】:

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


    【解决方案1】:

    您似乎在 HolidayRequest 对象中缺少对请求假期的人的引用。我本来希望在 HolidayRequest 对象中看到 Person 或 PersonId。在那里,您可以计算 Duration 和 RemainingHoliday 之间的差异。

    【讨论】:

    • 我正在使用实体框架,所以引用由 Person 类上的虚拟 ICollection 处理,至少我的请求数据库表上似乎有一个 PersonId 字段
    猜你喜欢
    • 1970-01-01
    • 2010-12-31
    • 2011-06-17
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多