Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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# 如何将自定义验证规则应用于MVC3中的ViewModel属性_C#_Asp.net Mvc 3_Datetime_Validation - Fatal编程技术网

C# 如何将自定义验证规则应用于MVC3中的ViewModel属性

C# 如何将自定义验证规则应用于MVC3中的ViewModel属性,c#,asp.net-mvc-3,datetime,validation,C#,Asp.net Mvc 3,Datetime,Validation,在我的MVC应用程序中,我有以下ViewModel: public class MyViewModel { public int StartYear { get; set; } public int? StartMonth { get; set; } public int? StartDay { get; set; } public int? EndYear { get; set; } public int? EndMonth { get; set; } p

在我的MVC应用程序中,我有以下
ViewModel

public class MyViewModel
{
   public int StartYear { get; set; }
   public int? StartMonth { get; set; }
   public int? StartDay { get; set; }

   public int? EndYear { get; set; }
   public int? EndMonth { get; set; }
   public int? EndDay { get; set; }

   [DateStart]
   public DateTime StartDate
   {
       get
       {
           return new DateTime(StartYear, StartMonth ?? 1, StartDay ?? 1);
       }
   }

   [DateEnd(DateStartProperty="StartDate")]
   public DateTime EndDate
   {
       get
       {
           return new DateTime(EndYear ?? DateTime.MaxValue.Year, EndMonth ?? 12, EndDay ?? 31);
       }
   }
 }
我不使用日历助手,因为我需要这种格式的日期(后面有一个逻辑)。现在,我创建了自定义验证规则:

    public sealed class DateStartAttribute : ValidationAttribute
    {
        public override bool IsValid(object value)
        {
            DateTime dateStart = (DateTime)value;
            return (dateStart > DateTime.Now);
        }
    }

    public sealed class DateEndAttribute : ValidationAttribute
    {
        public string DateStartProperty { get; set; }
        public override bool IsValid(object value)
        {
            // Get Value of the DateStart property
            string dateStartString = HttpContext.Current.Request[DateStartProperty];
            DateTime dateEnd = (DateTime)value;
            DateTime dateStart = DateTime.Parse(dateStartString);

            // Meeting start time must be before the end time
            return dateStart < dateEnd;
        }
    }
公共密封类DateStartAttribute:ValidationAttribute
{
公共覆盖布尔值有效(对象值)
{
DateTime dateStart=(DateTime)值;
return(dateStart>DateTime.Now);
}
}
公共密封类DateEndAttribute:ValidationAttribute
{
公共字符串DateStartProperty{get;set;}
公共覆盖布尔值有效(对象值)
{
//获取DateStart属性的值
字符串dateStartString=HttpContext.Current.Request[DateStartProperty];
DateTime dateEnd=(DateTime)值;
DateTime dateStart=DateTime.Parse(dateStartString);
//会议开始时间必须早于结束时间
返回日期开始<日期结束;
}
}
问题在于
DateStartProperty
(在本例中为
StartDate
)不在
请求
对象中,因为它是在表单发布到服务器后计算的。因此,
dateStartString
始终为空。如何获取
StartDate
的值?

试试这个插件:


希望这对您有所帮助~

您可以使用反射来获取中的其他属性(这对我来说似乎有点麻烦),或者为类创建一个自定义验证属性,而不是前面讨论的单个属性。

谢谢,但我正在寻找服务器端验证。