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,并且验证失败-谢谢!