首页 > 解决方案 > ASP.NET MVC 自定义验证业务逻辑

问题描述

我正在尝试实现一些自定义验证,但我正在努力解决一些逻辑问题。

验证规则只是一个员工employeeID在特定日期范围内不能请求多个假期。

因此,例如,如果员工有'01/01/2019' 和'05/01/2019'employeeID的假期请求StartDateFinsihDate

然后他们请求另一个请求“ StartDate03/01/2019”和“ FinsihDate04/01/2019”。

然后验证将处理此问题。

我只是不确定如何用它的逻辑方面来实现它,因为我对 c# 不太熟悉

 using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Linq;
 using System.Web;

namespace HolidayTracker.Models
{
public class ValidSimilarRequests : ValidationAttribute
{
    private LotusWorksEntities db = new LotusWorksEntities();
    protected override ValidationResult
            IsValid(object value, ValidationContext validationContext)
    {




        var model = (Models.HolidayRequestForm)validationContext.ObjectInstance;

        int empID = Convert.ToInt32(model.EmployeeID);

        DateTime _startdate = Convert.ToDateTime(model.StartDate);
        DateTime _finishdate = Convert.ToDateTime(model.FinishDate);

        var holidayexist = db.HolidayRequestForms.Any()

        if (holidayexist)
        {
            return new ValidationResult
                ("A holiday Request for this date range has already been requested");
        }


        else
        {
            return ValidationResult.Success;
        }


    }
}

}

模型:

{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

public partial class HolidayRequestForm
{
    public int RequestID { get; set; }

    [ValidSimilarRequests(ErrorMessage =
        "A holiday Request for this date range has already been requested")]
    public int EmployeeID { get; set; }

     [ValidSameWeek(ErrorMessage =
        "Holiday Request Must be made on a weekly Period")]
    [DisplayFormat(DataFormatString = "{0:dd/MMM/yy}", ApplyFormatInEditMode = true)]
    public System.DateTime StartDate { get; set; }

    [ValidStartFinishDate(ErrorMessage =
        "Finish Date can not be Greater than Start date.")]
    [DisplayFormat(DataFormatString = "{0:dd/MMM/yy}", ApplyFormatInEditMode = true)]
    public System.DateTime FinishDate { get; set; }

    [Range(0.0001, int.MaxValue, ErrorMessage = "Hours Requested must be greater than zero. ")]
    public decimal HoursTaken { get; set; }
    public string Comments { get; set; }
    public int YearCreated { get; set; }
    public int MonthCreated { get; set; }
    public int DayCreated { get; set; }
    public Nullable<int> YearOfHoliday { get; set; }
    public Nullable<bool> Approved { get; set; }
    public string SubmittedBy { get; set; }
    public string ApprovedBy { get; set; }

    public virtual Employee Employee { get; set; }
}
}

标签: c#asp.net-mvcvalidation

解决方案


你可以把它放到你的任何。像这样的东西:

var holidayexist = db.HolidayRequestForms.Any(x=>x.EmpID==empID && x.Startdate>_startdate && x.Enddate < _enddate));

当然,我不知道您的 HolidayRequestForm 对象是如何构建的,希望您明白我的意思。


推荐阅读