次の方法で共有


動的に型指定されたビューと 厳密に型指定されたビュー

作成者: Rick Anderson

ASP.NET MVC 3 でコントローラーからビューに情報を渡すには、次の 3 つの方法があります:

  1. 厳密に型指定されたモデル オブジェクトとして。
  2. 動的型として (動的 @model を使用)
  3. ViewBag を使用して

動的で厳密に型指定されたビューを比較して比較するための単純な MVC 3 Top Blog アプリケーションを作成しました。 コントローラーは、ブログの簡単な一覧から始まります:

using System.Collections.Generic;
using System.Web.Mvc;

namespace Mvc3ViewDemo.Controllers {

    public class Blog {
        public string Name;
        public string URL;
    }

    public class HomeController : Controller {

        List<Blog> topBlogs = new List<Blog>
      { 
          new Blog { Name = "ScottGu", URL = "http://weblogs.asp.net/scottgu/"},
          new Blog { Name = "Scott Hanselman", URL = "http://www.hanselman.com/blog/"},
          new Blog { Name = "Jon Galloway", URL = "http://www.asp.net/mvc"}
      };

        public ActionResult IndexNotStonglyTyped() {
            return View(topBlogs);
        }

        public ActionResult About() {
            ViewBag.Message = "Welcome to ASP.NET MVC!";
            return View();
        }
    }
}

IndexNotStonglyTyped() メソッドを右クリックし、Razor ビューを追加します。

8475.NotStronglyTypedView[1]

[厳密に型指定されたビューを作成する] ボックスがチェックされていないことを確認します。 結果のビューには、次の内容はあまり含まれません:

@{
    ViewBag.Title = "IndexNotStonglyTyped";
}

<h2>IndexNotStonglyTyped</h2>

On the first line of the Views\Home\IndexNotStonglyTyped.cshtml file, add the model directive and the dynamic keyword.
@model dynamic

厳密に型指定されたビューではなく動的なビューを使用しているため、Intellisense は役に立ちません。 完成したコードを以下に示します:

@model dynamic
           
@{
    ViewBag.Title = "IndexNotStonglyTyped";
}

<h2>Index Not Stongly Typed</h2>

<p>
 <ul>
@foreach (var blog in Model) {
   <li>
    <a href="@blog.URL">@blog.Name</a>
   </li>   
}
 </ul>
</p>

6646.NotStronglyTypedView_5F00_IE[1]

次に、厳密に型指定されたビューを追加します。 コントローラーに次のコードを追加します:

public ActionResult StonglyTypedIndex() {
    return View(topBlogs);
}

これはまったく同じ戻り値 View(topBlogs) であることに注意してください。厳密に型指定されていないビューとして呼び出します。 StonglyTypedIndex() 内を右クリックし、[ビューの追加] を選択します。 今回は、Blog Model クラスを選択し、スキャフォールディング テンプレートとして [リスト] を選択します。

5658.StrongView[1]

新しいビュー テンプレート内では、Intellisense のサポートが提供されます。

7002.IntelliSense[1]