这并不重要,但我收到的信息相互矛盾,所以我想在这里问一下。
假设我有一个简单的Controller,我想将Model传递给View。大多数时候我都是这样看的:
[HttpGet]
public ActionResult Foo() {
var bar = new SomeModel() {
Id = 1,
Name = "John Dork",
Email = "some@email.something"
};
ViewData.Model = bar;
return View();
}
或者像这样:
[HttpGet]
public ActionResult Foo() {
var bar = new SomeModel() {
Id = 1,
Name = "John Dork",
Email = "some@email.something"
};
return View(bar);
}
问题:虽然我不知道将这些数据发送到视图的这两种方式之间存在差异,但实际上是否存在差异? 与他们有什么不同?这样做的“正确”方法是什么?
由于
答案 0 :(得分:2)
它们是等价的。在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
)更流畅和愉悦。