Asp.net mvc 3 datetime数据批注不工作

Asp.net mvc 3 datetime数据批注不工作,asp.net-mvc-3,validation,datetime,razor,Asp.net Mvc 3,Validation,Datetime,Razor,我需要通过验证验证datetime是否有效 剃刀MVC3 阶级 编辑视图表单 <span class="editor-field"> @Html.EditorFor(model => model.DOB) @Html.ValidationMessageFor(model => model.DOB) @EditorFor(model=>model.DOB) @Html.ValidationMessageFor(model=>model.DOB) 验证捕获无效日期,但在

我需要通过验证验证datetime是否有效

剃刀MVC3

阶级

编辑视图表单

<span class="editor-field">
@Html.EditorFor(model => model.DOB)
@Html.ValidationMessageFor(model => model.DOB)

@EditorFor(model=>model.DOB)
@Html.ValidationMessageFor(model=>model.DOB)
验证捕获无效日期,但在输入有效日期时不会清除错误,因此表单将挂起。有人知道使用验证来检查日期时间是否有效的有效方法吗

谢谢,乔

更新的控制器操作

[HttpPost]
public ActionResult Create(Talent talent)
{
  talent.Modified = talent.Created = DateTime.Now;
  if (talent.DOB < DateTime.Now.AddYears(-100) || talent.DOB > DateTime.Now)
  {
    talent.DOB = DateTime.Parse("0001/01/01"); talent.Skill = "changed"; 
    return View(talent); }
[HttpPost]
公共行动结果创建(人才)
{
talent.Modified=talent.Created=DateTime.Now;
if(talent.DOBDateTime.Now)
{
talent.DOB=DateTime.Parse(“0001/01/01”);talent.Skill=“已更改”;
返回视图(人才);}
最终控制员和后期行动

string errorMessageDOB = "DOB is out of range, it needs to be between " + DateTime.Now.AddYears(-100).ToShortDateString()
    + " and " + DateTime.Now.ToShortDateString() + ".";
//
// POST: /Talent/Create

[HttpPost]
public ActionResult Create(Talent talent)
{
  talent.Modified = talent.Created = DateTime.Now;
  if (talent.DOB < DateTime.Now.AddYears(-100) || talent.DOB > DateTime.Now)
  { ModelState.AddModelError(string.Empty, errorMessageDOB); }
string errorMessageDOB=“DOB超出范围,它需要介于“+DateTime.Now.AddYears(-100).toSortDateString()之间
+和“+DateTime.Now.ToSortDateString()+”;
//
//职位:/人才/创建
[HttpPost]
公共行动结果创建(人才)
{
talent.Modified=talent.Created=DateTime.Now;
if(talent.DOBDateTime.Now)
{ModelState.addmodeleror(string.Empty,errorMessageDOB);}

您可以实现自定义验证属性,如中所示。

斯图尔特编写了一些很棒的代码,但这比我想要的要复杂得多,我不想为出生日期选择日期。我在发布操作中添加了一些代码(请参阅更新的问题)。当我在调试器中查看时,它成功捕获了超出范围的日期并更新了DOB和Skill字段,但当视图重新显示时,旧值仍然存在(我正在测试,以查看将DOB设置为1/1/0001是否会启动所需的有效日期验证。Skill仅用于测试)。您知道为什么视图中未更新编辑的字段吗?这可能是因为HTML帮助程序在重新显示视图时使用的是ModelState中的值,而不是您在模型中设置的值。如果您希望更改生效,则需要从模型状态中删除这些值。例如,您似乎正在尝试ng设置动作中的
Modified
DOB
Skill
属性=>
ModelState.Remove(“Modified”);ModelState.Remove(“DOB”);ModelState.Remove(“Skill”);
。查看ModelState时发现此解决方案[1]:使用ModelState.AddModelError();请参阅更新的帖子获取代码。
string errorMessageDOB = "DOB is out of range, it needs to be between " + DateTime.Now.AddYears(-100).ToShortDateString()
    + " and " + DateTime.Now.ToShortDateString() + ".";
//
// POST: /Talent/Create

[HttpPost]
public ActionResult Create(Talent talent)
{
  talent.Modified = talent.Created = DateTime.Now;
  if (talent.DOB < DateTime.Now.AddYears(-100) || talent.DOB > DateTime.Now)
  { ModelState.AddModelError(string.Empty, errorMessageDOB); }