c# - ASP.NET MVC 自定义验证业务逻辑
问题描述
我正在尝试实现一些自定义验证,但我正在努力解决一些逻辑问题。
验证规则只是一个员工employeeID
在特定日期范围内不能请求多个假期。
因此,例如,如果员工有'01/01/2019' 和'05/01/2019'employeeID
的假期请求StartDate
FinsihDate
然后他们请求另一个请求“
StartDate
03/01/2019”和“ FinsihDate
04/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; }
}
}
解决方案
你可以把它放到你的任何。像这样的东西:
var holidayexist = db.HolidayRequestForms.Any(x=>x.EmpID==empID && x.Startdate>_startdate && x.Enddate < _enddate));
当然,我不知道您的 HolidayRequestForm 对象是如何构建的,希望您明白我的意思。
推荐阅读
- html - 根据公寓数量提取房产的区域和城市
- excel - VBA Excel ComboBox值到范围(“特定单元格”到最后一列数据)
- reactjs - 如何在本机反应中制作半圆形仪表?
- angular - 如何异步获取mat表每一行的数据
- c - 以运行长度编码的形式压缩文件
- ansible - Ansible 在清单中的最后一个主机之后挂起
- php - Wordpress 管理插件:是否可以阻止 Wordpress 呈现 UI?
- wordpress - 将评论页面重新路由到主博客文章页面
- rdf - 是否可以用 SHACL 描述单例属性?
- javascript - css className 比 material-ui v5 中的 css 类具有较低的特异性