0

这不是那么重要,但我得到的信息相互矛盾,所以我想在这里问。

假设我有一个简单的控制器,我想将模型传递给视图。大多数时候我看到它是这样的:

[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);
}

问题:虽然我不知道这两种将数据发送到视图的方式之间的区别,但实际上有区别吗?他们有什么不同?这样做的“正确”方法是什么?

谢谢

4

1 回答 1

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)更流畅和令人愉悦。

于 2012-04-12T00:51:53.043 回答