2011-01-19 71 views
1

如果ModelState.IsValid==false,我們應該返回View()View(movie)如果`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); 
     } 
    } 

回答

2

取決於您是否要清除表格。

返回模型會將用戶輸入的值放回表單中,返回的view()將在回發後顯示空表單。

+1

爲什麼回覆? 「返回視圖()將顯示一個空的表單或回發。」 – xport 2011-01-19 07:45:58

+1

這是錯誤的,發佈的值保存在`ModelState`中,您不需要一個模型來保持表單的狀態。如果不通過模型不能清除表單,則必須清除「ModelState」。 – 2011-03-15 18:01:37

1

驗證失敗時總是返回相同的模型(返回查看(電影);)

1

我喜歡做的是:

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

這樣我可以返回View()無需擔心傳遞模型作爲論據。可能有多種情況可能需要返回視圖,例如嘗試/抓住SaveChanges()。這也使您有機會處理OnException方法中的錯誤,並返回視圖而不會丟失模型。

相關問題