>我在视图中有一个输入框,用于指定日期
如果用户将其留空,则ModelState
将返回false
,模型将返回到视图中。
但是,在这种情况下,DateTime
字段随后填充值 DateTime.MinValue
(01/01/0001)
如何从模型中清除此值,并返回空白输入框?
谢谢
如果您尚未验证,则将该日期定义为模型中的nullable
DateTime? AnyDate {get; set;}
所以,问题将得到解决。当用户不输入AnyDate
时,发布后将被null
。如果它不起作用,您可以编写:
if (!ModelState.IsValid)
{
//control for any case
if(model.AnyDate == DateTime.MinValue) model.AnyDate = null;
}
返回 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);
}
一旦你 POST-回到你的视图,你将需要使用 SetModelValue() 方法操作 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);
}
编辑
一些额外的研究发现了以下内容,另请参阅:
MVC - 如何更改帖子中文本框的值?
如何在发送到查看之前在控制器操作中修改已发布的表单数据?
我希望这有所帮助。祝你好运!