asp.net mvc 4 - 在 ModelState.IsValid 失败后将日期时间输入框重置为空白



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

如果用户将其留空,则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 - 如何更改帖子中文本框的值?

如何在发送到查看之前在控制器操作中修改已发布的表单数据?

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

相关内容

  • 没有找到相关文章

最新更新