将模型数据传递给ASP.NET MVC中的View的正确方法

时间:2012-04-12 00:40:30

标签: asp.net-mvc model

这并不重要,但我收到的信息相互矛盾,所以我想在这里问一下。

假设我有一个简单的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);
}

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

由于

1 个答案:

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