【问题标题】:datetime dataannotation not working日期时间数据注释不起作用
【发布时间】:2012-03-22 04:45:02
【问题描述】:

我需要通过 Validation 验证日期时间是否有效。

剃刀 MVC3

[Range(typeof(DateTime), "1/1/1930", "1/1/2112", 
 ErrorMessage = "Value for {0} must be between {1} and {2}")]
public DateTime DOB { get; set; }

编辑视图表单

<span class="editor-field">
@Html.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); }

Final Controller 和 Post Action

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); }

【问题讨论】:

    标签: asp.net-mvc-3 validation datetime razor


    【解决方案1】:

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

    【讨论】:

    • Stuart 编写了一些很棒的代码,但这比我想要的要复杂得多,而且我不想要出生日期的日期选择器。我在我的 POST 操作中添加了一些代码(请参阅更新的问题)。当我在调试器中观看它时,它成功捕获了一个超出范围的日期并更新了 DOB 和 Skill 字段,但是当重新显示视图时,旧值仍然存在(我正在测试是否将 DOB 设置为 1/1/ 0001 将启动所需验证的有效日期。技能仅用于测试)。您知道为什么视图中没有更新编辑的字段吗?
    • 这可能是因为 HTML 助手在重新显示视图时使用了 ModelState 中的值,而不是您在模型中设置的值。如果您希望您的更改生效,您需要从模型状态中删除这些值。例如,您似乎试图在您的操作中设置 ModifiedDOBSkill 属性 => ModelState.Remove("Modified"); ModelState.Remove("DOB"); ModelState.Remove("Skill");
    • 在查看 ModelState 时发现了这个解决方案 [1]:stackoverflow.com/questions/5739362/… Use ModelState.AddModelError();请参阅更新的 POST 代码。
    猜你喜欢
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 2018-06-04
    • 2021-05-27
    • 2016-06-02
    • 1970-01-01
    • 2011-01-16
    • 2015-08-18
    相关资源
    最近更新 更多