2012-04-12 10 views
0

これはそれほど重要ではありませんが、私はこれに関する矛盾した情報を得ています。ASP.NET MVCのビューにモデルデータを渡す正しい方法

私はシンプルなコントローラを持っており、モデルをビューに渡したいとします。ほとんどの時間は、私はこのようにそれを参照してください。

[HttpGet] 
public ActionResult Foo() { 
    var bar = new SomeModel() { 
     Id = 1, 
     Name = "John Dork", 
     Email = "[email protected]" 
    }; 
    return View(bar); 
} 

質問:私はこのデータを送信し、これらの二つの方法の違いを認識していないんだが

[HttpGet] 
public ActionResult Foo() { 
    var bar = new SomeModel() { 
     Id = 1, 
     Name = "John Dork", 
     Email = "[email protected]" 
    }; 
    ViewData.Model = bar; 
    return View(); 
} 

またはこのような

実際のところ違いはありますか?そして どういうふうにが違うのですか?これを行う「正しい」方法は何でしょうか?

ありがとう

答えて

1

これらは同等です。中には、通話をオン

protected internal ViewResult View(object model) 
    { 
     return View(null /* viewName */, null /* masterName */, model); 
    } 

:MVCのソースコードでは、View(object)は以下のように定義されて

protected internal virtual ViewResult View(string viewName, string masterName, object model) 
    { 
     if (model != null) 
     { 
      ViewData.Model = model; 
     } 

     return new ViewResult 
     { 
      ViewName = viewName, 
      MasterName = masterName, 
      ViewData = ViewData, 
      TempData = TempData, 
      ViewEngineCollection = ViewEngineCollection 
     }; 
    } 

そして、あなたはそれだけでViewData.Modelを設定していることがわかります。

「正しい」方法はありませんが、2番目のアプローチ(つまり、ViewData.Modelを使用しない)はより流暢で気に入っています。

+0

私が推測したように、感謝します:) – MilkyWayJoe