c# - 将数据从模型传递到自定义验证类

标签 c# .net asp.net-mvc asp.net-mvc-2

我有一个数据验证类,用于检查 session 的开始日期是否早于结束日期。

模型会自动传递需要验证的日期,但我在传递需要验证的数据时遇到了一些困难。

这是我的验证类

sealed public class StartLessThanEndAttribute : ValidationAttribute
    {            
        public DateTime DateEnd { get; set; }

        public override bool IsValid(object value)
        {                
            DateTime end = DateEnd;
            DateTime date = (DateTime)value;

            return (date < end);
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentCulture, ErrorMessageString, name);
        }
    }

这是包含数据注释的类

[StartLessThanEnd(ErrorMessage="Start Date must be before the end Date")]
public DateTime DateStart { get; set; }

这是我的 Controller

[HttpPost, Authorize]
    public ActionResult Create(Pol_Event pol_Event)
    {
        ViewData["EventTypes"] = et.GetAllEventTypes().ToList();

        StartLessThanEndAttribute startDateLessThanEnd = new StartLessThanEndAttribute();


        startDateLessThanEnd.DateEnd = pol_Event.DateEnd;


        if (TryUpdateModel(pol_Event))
        {
            pol_Event.Created_On = DateTime.Now;
            pol_Event.Created_By = User.Identity.Name;

            eventRepo.Add(pol_Event);
            eventRepo.Save();
            return RedirectToAction("Details", "Events", new { id = pol_Event.EventID });
        }

        return View(pol_Event);
    }

最佳答案

与多个属性一起使用的验证属性应该应用于模型而不是单个属性:

[AttributeUsage(AttributeTargets.Class)]
public class StartLessThanEndAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var model = (MyModel)value;
        return model.StartDate < model.EndDate;
    }
}

[StartLessThanEnd(ErrorMessage = "Start Date must be before the end Date")]
public class MyModel
{
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
}

关于c# - 将数据从模型传递到自定义验证类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3626322/

相关文章:

c# - 内部类和公共(public)构造函数 - 为什么它与 Activator.CreateInstance 一起使用?

asp.net-mvc - ASP.NET MVC 3 使用 Canonicalize 包和 IIS SEO 工具包

c# - DI 容器是否需要自己实例化对象才能使用构造函数注入(inject)?

c# - 如何将 IoC 容器保持在一个地方,而内部类需要在 bee 构造后创建依赖项

c# - 如果在整个应用程序生命周期中都需要StreamWriter,该在哪里放置它?

c# - ASP.NET Core 中基于声明的授权

c# - 关闭 C# WPF 应用程序中的所有窗口

asp.net-mvc - 如何在 MVC 中使用文件上传?

javascript - 我的模态弹出窗口中的 .submit(function ()) 不起作用,我的模态弹出窗口将发送正常的 http post 请求

c# - 为什么我的 WPF CheckBox 绑定(bind)不起作用?