C# 出生日期自定义范围数据批注不起作用(断开页面)

C# 出生日期自定义范围数据批注不起作用(断开页面),c#,asp.net-mvc,asp.net-mvc-2,data-annotations,C#,Asp.net Mvc,Asp.net Mvc 2,Data Annotations,我有一个自定义数据注释验证器来验证从今天起150年内的出生日期 以下是我的自定义数据批注: public class DateOfBirthRange : RangeAttribute { public DateOfBirthRange() : base(typeof(DateTime), DateTime.Now.AddYears(-150).ToShortDateString(), DateTime.Now.ToShortDateString()) { } } 像这

我有一个自定义数据注释验证器来验证从今天起150年内的出生日期

以下是我的自定义数据批注:

public class DateOfBirthRange : RangeAttribute
{
    public DateOfBirthRange()
        : base(typeof(DateTime), DateTime.Now.AddYears(-150).ToShortDateString(), DateTime.Now.ToShortDateString()) { }
}
像这样使用它:

[Required(ErrorMessage = "BirthDate is required.")]
[DisplayName("Birth Date")]
[DateOfBirthRange(ErrorMessage = "BirthDate must be between {1:M/d/yyyy} and {2:M/d/yyyy}")]
public DateTime BirthDate { get; set; }
这是一个非常奇怪的问题,因为我返回的错误与数据注释无关。在我看来,这导致了一个错误:

<%: Html.DropDownListFor(m => m.JuniorSenior, (IEnumerable<SelectListItem>)ViewData["seniority"], new { @class = "input-small" })%>
My InitializeSelectList函数:

public void IntializeSelectLists(PatientModel pm)
        {
            seniority = new[] { "Select", "Jr.", "Sr." };
            List<SelectListItem> JuniorSenior = new List<SelectListItem>();
            foreach (string item in seniority)
            {
                SelectListItem alb = new SelectListItem { Text = item, Value = item };
                JuniorSenior.Add(alb);
            }
            ViewData["seniority"] = JuniorSenior;
        }
public void初始化选择列表(PatientModel pm)
{
资历=新[]{“选择”、“小”和“高级”};
List JuniorSenior=新列表();
foreach(资历中的字符串项)
{
SelectListItem alb=new SelectListItem{Text=item,Value=item};
添加(alb);
}
ViewData[“资历”]=年少者;
}

任何帮助都将不胜感激

在我的头撞了一下之后,我终于发现了问题所在

在我的
initializeselectlists()
中,我在
JuniorSenior
列表之前填充了genders列表。事实证明,
pm.Gender
返回null,因此导致异常

它在
m.JuniorSenior
崩溃的原因是因为我在
m.Gender
之前显示了它。因此
m.JuniorSenior
始终为空,因为代码没有到达填充
m.JuniorSenior
的点

patModel.Gender = values["genders"].Trim();
我通过在我的
Save()
中添加这个解决了这个问题


感谢所有花时间帮助我的人:)

引发异常时
m.JuniorSenior
的值是多少?m.JuniorSenior可以是(“,”Jr.,”Sr.”),具体取决于用户选择的内容。但正如我所说,只有当出生日期在今天起150年之前时,才会出现错误。如果日期介于150年后的今天,一切正常。请显示接收表单提交的POST controller操作,好吗?引发异常时,
m.JuniorSenior
的确切值是多少?
ViewData[“资历”]
的价值是什么。在返回视图之前,您似乎没有填充
ViewData[“资历”]
。看看我的答案。
patModel.Gender = values["genders"].Trim();