2012-04-12 80 views
0

這並不重要,但是我得到了有關此信息的衝突,所以我想到了這裏的問題。將模型數據傳遞給ASP.NET MVC中的視圖的正確方法

比方說,我有一個簡單的控制器,我想將模型傳遞給視圖。大多數時候,我看到這樣的:

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

或者這樣:

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

問題:雖然我不知道這個數據發送到的這兩種方式之間的差異這個觀點,其實有差別嗎?而什麼是不同的呢?這將是什麼「正確」的方式呢?

謝謝

回答

1

它們是等效的。在MVC的源代碼,View(object)被定義爲:

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

這反過來電話:

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

這樣做沒有「正確」的方式,但我覺得第二種方法(即不使用ViewData.Model)更流暢和令人愉快。

+0

正如我懷疑,謝謝:) – MilkyWayJoe 2012-04-12 00:53:29

相關問題