C# 出生日期自定义范围数据批注不起作用(断开页面)
我有一个自定义数据注释验证器来验证从今天起150年内的出生日期 以下是我的自定义数据批注: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()) { } } 像这
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();