如果`ModelState.IsValid == false`,我们应该返回`View()`或`View(movie)`?

时间:2011-01-19 07:19:57

标签: asp.net-mvc

如果ModelState.IsValid==false,我们应该返回View()View(movie)

    public ActionResult Create()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Create(Movie movie)
    {
        if (ModelState.IsValid)
        {
            context.Movies.Add(movie);
            context.SaveChanges();
            return RedirectToAction("Index");
        }
        else
        {
            return View();
        }
    }

    public ActionResult Create()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Create(Movie movie)
    {
        if (ModelState.IsValid)
        {
            context.Movies.Add(movie);
            context.SaveChanges();
            return RedirectToAction("Index");
        }
        else
        {
            return View(movie);
        }
    }

3 个答案:

答案 0 :(得分:2)

取决于您是否要清除表单。

返回模型会将用户输入的值放回到返回view()将在回发后显示空表单的表单中。

答案 1 :(得分:1)

验证失败时始终返回相同的模型(返回View(movie);)

答案 2 :(得分:1)

我喜欢做的是:

[HttpPost]
public ActionResult Create(Movie movie)
{
   this.ViewData.Model = movie;
...

这样我可以返回View()而不必担心将模型作为参数传递。您可能想要返回视图的情况不止一种,例如尝试/捕捉SaveChanges()。这也使您有机会处理OnException方法上的错误并返回视图而不会丢失模型。