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

質問: このデータをビューに送信するこれら 2 つの方法の違いは認識していませんが、実際に違いはありますか? そして、それらの違いはですか?これを行う「正しい」方法は何でしょうか?

ありがとう

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

「正しい」方法はありませんが、2 番目の方法 (つまり、 を使用しないViewData.Model) の方が流暢で楽しいと思います。

于 2012-04-12T00:51:53.043 に答える