2012-04-12 79 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

相关问题