Asp.net mvc 4 ModelState.IsValid失败后,将DateTime输入框重置为空

Asp.net mvc 4 ModelState.IsValid失败后,将DateTime输入框重置为空,asp.net-mvc-4,datetime,Asp.net Mvc 4,Datetime,我在视图中有一个输入框,用于指定所需日期 如果用户将此项留空,ModelState将返回false,模型将返回到视图 但是,在这种情况下,DateTime字段随后填充值DateTime.MinValue(01/01/0001) 如何从模型中清除此值,并返回一个空白输入框 谢谢一旦您返回视图,您将需要使用该方法操作ModelState(而不是模型)中的值。或者,您可以Remove()删除有问题的条目,但这会产生其他影响(例如,损坏ModelStateDictionary对象中的模型) 例如,如果您

我在视图中有一个输入框,用于指定所需日期

如果用户将此项留空,
ModelState
将返回
false
,模型将返回到视图

但是,在这种情况下,
DateTime
字段随后填充值
DateTime.MinValue
(01/01/0001)

如何从模型中清除此值,并返回一个空白输入框


谢谢

一旦您返回视图,您将需要使用该方法操作ModelState(而不是模型)中的值。或者,您可以
Remove()
删除有问题的条目,但这会产生其他影响(例如,损坏ModelStateDictionary对象中的模型)

例如,如果您的数据元素被称为
RequiredDateTime
,那么您的控制器代码可能是:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ThisAction(int id, YourModel model)
{
    // Process the 'IsValid == true' condition
    if (ModelState.IsValid)
    {
        // ...
        return RedirectToAction("NextAction");
    }

    // Process the 'IsValid == false' condition
    if (ModelState.ContainsKey("RequiredDateTime"))
    {
        ModelState.SetModelValue("RequiredDateTime", new ValueProviderResult(...));
    }

    // ...

    return View(model);
}
编辑

一些额外的研究发现了以下内容,另请参见:


我希望这有帮助。祝你好运

如果要返回null值,必须将模型的实体编辑为null,如下所示:

public Class MyObject
{
    String parameter {get; set;}
    DateTime? time {get; set;}
}
如果要在使用字段重新呈现页面之前更改用户输入的值,则必须将模型对象编辑为DateTime.MinValue(例如),如下所示:

    public ActionResult MyMethod(MyObject model)
    {
    if (ModelState.IsValid)
        {
        ...
        } 
    else
        {
        model.time = DateTime.MinValue; 
        }
    return View(model);
    }

如果尚未验证,则在模型中将该日期定义为
null

DateTime? AnyDate {get; set;}
所以,这个问题将得到解决。当用户未输入任何日期时,post后它将为空。如果它不起作用,您可以写下:

if (!ModelState.IsValid)
{
   //control for any case
   if(model.AnyDate == DateTime.MinValue) model.AnyDate = null;      
} 

这就是我最后所做的-我没有意识到我可以拥有一个带有[Required]注释的可空属性。。。现在,如果没有输入任何内容,则传递给控制器的值为null,并且验证失败-谢谢!