2011-01-19 21 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

なぜポストバックしますか? msgstr "view()を返すと、空のフォームが表示されるか、ポストバックされます。" – xport

+1

これは間違っています。投稿された値は 'ModelState'に保存されていますので、フォームの状態を保持するためのモデルは必要ありません。モデルを渡さないとフォームがクリアされないので、 'ModelState'をクリアする必要があります。 –

+0

興味深いことがいくつか説明できます。 –

1

は、必ず同じモデルを返します(ビュー(映画)を返す;)

+0

私はこれに同意せず、私はマイケルに同意する - これはビジネスロジックに依存している - 正しいか間違った方法はない。 – Rob

+0

フィールドを返さない(パスワードやキャプチャのテキストボックスなど)場合は、model.password = nullなどと設定します。モデルの新しいインスタンスを作成するオーバーヘッドは必要ありません。 –

1

私は何をしたいことは次のとおりです。

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

私はモデルを渡すことを心配することなくView()を返すことができますこの方法を引数として。ビューを返す必要がある状況が複数ある可能性があります(例: SaveChanges()を試してみてください。これにより、OnExceptionメソッドでエラーを処理し、モデルを失うことなくビューを返すこともできます。

関連する問題